二叉排序树转化成双链表
来源:互联网 发布:零式战斗机 知乎 编辑:程序博客网 时间:2024/04/28 05:40
1、二叉排序树定义:
二叉排序树是一棵空树,或者具有以下性质
(1)若左子树不空,那么左子树的所有节点均小于根节点。
(2)若右子树不空,那么右子树中所有节点均大于根节点。
(3)左右子树又是一颗二叉排序树。
2、二叉排序树变成双链表
将图中的二叉排序树变成双链表的思路:二叉树操作最常用的是递归算法。如果在左右子树已经是双链表的基础上,将左子树链表、右子树链表以及根节点变成一个双链表我们可以这样做:首先找到左子树链表最右边的元素(最大),右子树链表最左边的元素(最小),将这两个元素与根节点连接,那么就变成了一个双链表了。所以我们首先要做的是将左右子树变成双链表。
步骤:
(1)将左右子树变成双链表。
(2)左右子树链表与根节点进行合并,变成一个双链表。
C++代码实现
struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(nullptr),right(nullptr) { }};void convert(TreeNode *root) { if(root == nullptr) return; if(root->left == nullptr && root->right == nullptr) return; TreeNode *left = root->left; TreeNode *right = root->right; //左右子树变成双链表 convert(left); convert(right); //将左右子树链表与根节点合并一起 if(left){ while(left->right) left = left->right; left->right = root; root->left = left; } if(right){ while(right->left) right = right->left; root->right = right; right->left = root; }}TreeNode* binaryTreeToDoubleList(TreeNode *root){ if(root == nullptr) return nullptr; convert(root); //将root指向头结点 while(root->left) root = root->left; return root;}int main(int argc, char const *argv[]){ shared_ptr<TreeNode> root(new TreeNode(7)); shared_ptr<TreeNode> left(new TreeNode(4)); shared_ptr<TreeNode> right(new TreeNode(10)); shared_ptr<TreeNode> node(new TreeNode(6)); root->left = left.get(); root->right = right.get(); left->right = node.get(); TreeNode *p = binaryTreeToDoubleList(root.get()); while(p != nullptr){ cout << p->val << "\t"; p = p->right; } return 0;}
0 0
- 二叉排序树转化成双链表
- 二叉排序树转化成双向链表
- 将二叉排序树转化成双链表
- 二叉排序树转化成双向链表
- 二叉排序树转换成双链表
- 二叉排序树转换成双向链表
- 二叉排序树转换成双向链表
- 二叉排序树转换成双向链表
- 二叉树转化成双向链表
- 微软面试题,将二叉排序树转换成双向链表
- 【July第1题】二叉排序树转换成双链表
- 将排序二叉树转化成双向链表
- 二叉查找树转化成双向链表
- 【BST】把搜索二叉树转化成双链表
- 01二叉查找树转化成双向链表
- 非递归实现二叉搜索树转化成双链表
- LintCode378:将二叉查找树转化成双链表
- 二叉排序树转化为有序双向链表
- leetcode | Climbing Stairs
- 数据结构——排序
- php对象在内存中的分配
- java集合框架之链表
- storm-starter中的RollingTopWords代码解析
- 二叉排序树转化成双链表
- 闪讯利用openwrt路由器拨号教程(五)
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- 【小米笔试题】二分查找算法的变形
- [软考]之树与二叉树的遍历
- java微信开发需具备的条件
- 链表中倒数第K个节点
- leetcode 289: Game of Life
- 为Android的WebView添加播放音乐的接口供javascript调用