1、如何将二叉排序树转换为排序的双向链表
来源:互联网 发布:机顶盒禁止安装软件 编辑:程序博客网 时间:2024/05/21 13:22
输入:二叉查找树
左边子树比根小,右边子树比根大
输出:双向排序的链表
头开始 : 增序
尾开始: 降序
分析:
中序遍历二叉查找树,可以的到一个有序的链表;
每次访问一个树节点时,如果左子树和右子树是有序的,那么只需要调整三个节点:
左边子树链表的尾节点(lr),当前根节点(root),右边子树的头结点(rh)
典型的递归思想。
解:
节点指针 *head = NULL,*root = 树根节点, *tail = NULL;
转换树(head,tail, root);
//完成转换后head指针指向双向链表的头
//完成转换后tail指针指向双向链表的尾
主算法:
*lt指向左子树的尾节点
*rh指向右子树的头结点
1、边界终止条件
if (根节点为NULL)
{
head = tail = NULL
返回; //遇到空节点返回
}
2、递归处理
转换左子树(head, lt, root->pleft);
//转换后左子树有序
转换右子树(rh, tail,root->pright)
//转换后右子树有序
3、调整三个节点
if(指向左子树转换链表的尾节点指针不为空)
{
lt->右子节点 = root;
root->左子结点 = lt;
}
else
{
//无左子结点,当前根节点是双向链表的头节点
head = root;
}
if(指向右子树转换链表的头节点指针rh不为空)
{
root->右子结点 = rh;
rh->左子结点 = root;
}
else
{
//无右子结点,当前根节点是双向链表的尾节点
tail = root;
}
0 0
- 1、如何将二叉排序树转换为排序的双向链表
- 将二叉排序树BST转换成排序的双向链表
- 静态变量的应用--将二叉排序树转换为有序的双向链表输出
- 二叉排序树转换成排序的双向链表
- 二叉排序树转换成排序的双向链表
- 二叉排序树转化为排序的双向链表
- 如何将一个排序二叉树转换为循环双向链表
- 二叉排序树向双向链表的转换
- 二叉排序树与双向链表的转换
- 将二叉树转换为排序双向链表
- 树:将二叉搜索树转换为排序的双向链表
- 将BST转换为有序的双向链表!
- 查找二叉树转换为排序的双向链表
- 把二叉排序树变成排序的双向链表
- 1.1把二叉排序树转变成排序的双向链表
- 二叉排序树转化为有序双向链表
- 二叉排序树转化为双向链表
- 二叉排序树转化为双向链表
- 自定义函数+游标
- 如何提高网页加载速度?(一)
- Android 源码解析 之 setContentView
- 关于【电脑】有时出现的问题
- Acitivity中找不到或者不识别相对应的xml布局文件
- 1、如何将二叉排序树转换为排序的双向链表
- poj2155Matrix
- GCC -D预处理
- printf笔记
- C# 数字 日期 ToString()
- 由_layer.contents = (__bridge id)image.CGImage想到的
- 第八周项目3(2)-分数类的运算符重载
- Ubuntu14编译ffmpeg2.6.2为Android使用库
- Mac外接显示器设置(四种模式)