把二元查找树转变成排序的双向链表
2013-04-01 09:15
260 查看
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 81216
solution:
#include <iostream>
using namespace std;
typedef struct BiNode
{
struct BiNode* lchild;
struct BiNode* rchild;
int data;
}BiNode,*BiTree;
class BiTreeToDList
{
private:
BiNode* listHead;
BiNode* pList;
public:
BiTreeToDList();
void createTree(BiTree & root);
void inorder(BiTree root);
void convert(BiNode* p);
};
inline BiTreeToDList():listHead(NULL),pList(NULL)
{
}
void BiTreeToDList::createTree(BiTree & root)
{
int data;
cout<<"please input data:"<<endl;
cin>>data;
if('#'==data)
return ;
BiNode* node = new BiNode;
root = node;
try
{
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
throw "create node failer";
}catch(char* str)
{
cout<<str<<endl;
exit(-1);
}
createTree(root->lchild);
createTree(root->rchild);
};
void BiTreeToDList::convert(BiNode* p)
{
p->lchild = pList;
if(NULL!=pList)
{
pList->rchild = p;
}
else
{
listHead = p;
}
pList = p;
};
void BiTreeToDList::inorder(BiTree root)
{
if(NULL==root)
return ;
inorder(root->lchild);
convert(root);
inorder(root->rchild);
};
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 81216
solution:
#include <iostream>
using namespace std;
typedef struct BiNode
{
struct BiNode* lchild;
struct BiNode* rchild;
int data;
}BiNode,*BiTree;
class BiTreeToDList
{
private:
BiNode* listHead;
BiNode* pList;
public:
BiTreeToDList();
void createTree(BiTree & root);
void inorder(BiTree root);
void convert(BiNode* p);
};
inline BiTreeToDList():listHead(NULL),pList(NULL)
{
}
void BiTreeToDList::createTree(BiTree & root)
{
int data;
cout<<"please input data:"<<endl;
cin>>data;
if('#'==data)
return ;
BiNode* node = new BiNode;
root = node;
try
{
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
throw "create node failer";
}catch(char* str)
{
cout<<str<<endl;
exit(-1);
}
createTree(root->lchild);
createTree(root->rchild);
};
void BiTreeToDList::convert(BiNode* p)
{
p->lchild = pList;
if(NULL!=pList)
{
pList->rchild = p;
}
else
{
listHead = p;
}
pList = p;
};
void BiTreeToDList::inorder(BiTree root)
{
if(NULL==root)
return ;
inorder(root->lchild);
convert(root);
inorder(root->rchild);
};
相关文章推荐
- 二元查找树转变成排序的双向链表
- 【老鸟学算法】二元查找树转变成排序的双向链表——算法思想及java实现
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表[BST2DoubleLinkedList]
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 程序员面试题精选---01 把二元查找树转变成排序的双向链表
- 解题笔记(4)——把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表[数据结构]
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表[数据结构]
- [二叉树]把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 面试100题:1.把二元查找树转变成排序的双向链表
- 每天一算法(把二元查找树转变成排序的双向链表 )
- 把二元查找树转变成排序的双向链表
- 【转】100题题1解——把二元查找树转变成排序的双向链表
- 面试100题:1 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 【1】二元查找树转变成排序的双向链表