1将该二元查找树转换成一个排序的双向链表
来源:互联网 发布:java事务的四个特性 编辑:程序博客网 时间:2024/06/06 05:10
#include <iostream>
using namespace std;
typedef struct node
{
int value;
node* left;
node* right;
}node;
node* left_track(node* p)
{
while(p->left != NULL)
p = p -> left;
return p;
}
node* right_track(node* p)
{
while(p->right != NULL)
p = p -> right;
return p;
}
void track(node * p)
{
node* left = p -> left;
node* right = p -> right;
if(right != NULL)
{
node* post = left_track(right); //post指向右子树的最左结点
if(post != right)
{
p -> right = post;
post -> left = p;
}
else
post -> left = p;
}
if(left != NULL)
{
node* pre = right_track(left); //pre指向左子树的最右结点
if(pre != left )
{
p -> left = pre;
pre -> right = p;
}
else
pre -> right = p;
}
}
void travel(node* p) //必须采用后序遍历
{
if(p == NULL)
return;
else
{
travel(p->left);
travel(p->right);
cout<<p->value<<endl;
track(p);
}
}
node* root = NULL;
void add_to_tree(int num)
{
node* p = new node;
p -> value = num;
p -> left = NULL;
p -> right = NULL;
if(root == NULL)
root = p;
else
{
node* r = root;
node* save = r;
while(r != NULL)
{
save = r;
if(num > r->value)
r = r ->right;
else
r = r ->left;
}
if(num > save->value)
save ->right = p;
else
save ->left =p;
}
}
void middle_travel(node * root)
{
if(root == NULL)
return;
else
{
middle_travel(root->left);
cout<<root->value<<"\t";
middle_travel(root->right);
}
}
void delete_tree(node* root) //必须使用后序遍历
{
if(root == NULL)
return;
else
{
delete_tree(root->left);
delete_tree(root->right);
cout<< root->value <<" \t";
delete root;
}
}
int main()
{
add_to_tree(8);
add_to_tree(4);
add_to_tree(12);
add_to_tree(2);
add_to_tree(6);
add_to_tree(10);
add_to_tree(14);
// add_to_tree(11);
// add_to_tree(9);
middle_travel(root);
cout<<endl;
travel(root);
node* head = root;
node* tail = root;
while(head->left != NULL)
head = head ->left;
while(tail->right != NULL)
tail = tail ->right;
while(head != NULL)
{
cout << head ->value<<"\t";
head = head -> right;
}
cout<<endl;
while(tail != NULL)
{
cout<< tail -> value<<"\t";
tail = tail ->left;
}
delete_tree(root);
return 0;
}
- 1将该二元查找树转换成一个排序的双向链表
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
- 二元查找树转换成一个排序的双向链表
- 二元查找树转换成一个排序的双向链表
- 算法面试题01:将一棵二元查找树转换成一个排序的双向链表
- 将二元树转换成一个排序的双向链表(方法一)
- 将二元树转换成一个排序的双向链表(方法二)
- 微软等面试100题筛选答案-1-二元查找树转换成一个排序的双向链表
- 将二元查找树转变为排序的双向链表
- 第10题 把二元查找树转换成排序的双向链表
- 【算法题】二元查找树转换成排序的双向链表
- 把二元查找树转换成排序的双向链表
- 二元查找树与排序的双向链表的转换
- 悟透javascript
- Animated Crowd Rendering 骨骼动画模型的批量渲染
- 网页中预览PDF文件
- python学习笔记:五
- 图片异步加载之SDWebImage
- 1将该二元查找树转换成一个排序的双向链表
- java空格分隔的字符串表示的十六进制数转换为byte数组
- 手机支付宝面临的风险和应对(VI)---智能终端安全生态体系(未完待续)
- 安全企业如360如何做无线安全(I)
- C++静态库与动态库
- Codeforces Round #216 (Div. 2)
- 2设计包含min函数的栈
- 解决adb server is out of date问题
- 浅谈mybatis优缺点