把二元查找树转变成排序的双向链表
2012-08-20 20:38
337 查看
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求:不能创建任何新的结点,只调整指针的指向。
举例:
定义的二元查找树结点的数据结构如下:
答:用二叉树的中序遍历
运行的界面如下:
建造二叉树用到的tree.txt为:
要求:不能创建任何新的结点,只调整指针的指向。
举例:
10 / \ 转变 6 14 --> 4=6=8=10=12=14=16 / \ / \ 4 8 12 16
定义的二元查找树结点的数据结构如下:
struct BSTreeNode { int m_nValue; BSTreeNode *m_pLeft; BSTreeNode *m_pRight; };
答:用二叉树的中序遍历
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
struct BSTreeNode { int m_nValue; BSTreeNode *m_pLeft; BSTreeNode *m_pRight; };
//创建二元二叉树
void CreateBitree(BSTreeNode *&pNode, fstream &fin)
{
int dat;
fin>>dat;
if(dat==0)
{
pNode = NULL;
}
else
{
pNode = new BSTreeNode();
pNode->m_nValue=dat;
CreateBitree(pNode->m_pLeft, fin);
CreateBitree(pNode->m_pRight, fin);
}
}
//中序递归转变
void change(BSTreeNode *pNode, BSTreeNode *&pTail)
{
if (NULL != pNode)
{
change(pNode->m_pLeft, pTail);
if (NULL != pTail)
{
pTail->m_pRight = pNode;
}
pNode->m_pLeft = pTail;
pTail = pNode;
change(pNode->m_pRight, pTail);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BSTreeNode *pRoot = NULL;
BSTreeNode *pTail = NULL;
fstream fin("tree.txt");
CreateBitree(pRoot, fin);
change(pRoot, pTail);
while(NULL != pTail)
{
cout<<pTail->m_nValue<<" ";
pTail = pTail->m_pLeft;
}
cout<<endl;
return 0;
}
运行的界面如下:
建造二叉树用到的tree.txt为:
10 6 4 0 0 8 0 0 14 12 0 0 16 0 0
相关文章推荐
- 程序员面试100题---1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 程序员面试题精选(1):把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 非中序遍历思路把二元查找树转变成排序的双向链表的分析
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 面试___把二元查找树转变成排序的双向链表
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- [coolpad]把二元查找树转变成排序的双向链表
- 微软100题-第一题把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表