剑指offer_二叉树---二叉搜索树与双向链表
来源:互联网 发布:olay大红瓶有用吗 知乎 编辑:程序博客网 时间:2024/06/14 16:58
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
1,有序且为二叉搜索树,则只要使用二叉搜索树的中序遍历即可
2,二叉搜索树的左子树链表最右端链接根,根链接右子树链表最左端
3,递归链接即可
代码
/** * */package 二叉树;/** * <p> * Title:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 * </p> * 解题思路: 1.将左子树构造成双链表,并返回链表头节点。 2.定位至左子树双链表最后一个节点。 * 3.如果左子树链表不为空的话,将当前root追加到左子树链表。 4.将右子树构造成双链表,并返回链表头节点。 * 5.如果右子树链表不为空的话,将该链表追加到root节点之后。 6.根据左子树链表是否为空确定返回的节点。 * <p>由于要求转换后是排好序的,所以采用中序遍历。 * Description: * </p> * * @author 田茂林 * @data 2017年8月8日 下午10:36:03 */public class Convert { public TreeNode NodeConvert(TreeNode root) { if (root == null) return null; if (root.left == null && root.right == null) return root; //中序遍历哦========================================================== // 1.将左子树构造成双链表,并返回链表头节点 TreeNode left = NodeConvert(root.left); TreeNode p = left; // 2.定位至左子树双链表最后一个节点 while (p != null && p.right != null) { p = p.right; } // 3.如果左子树链表不为空的话,将当前root追加到左子树链表 if (left != null) { p.right = root; root.left = p; } //中序遍历哦========================================================== // 4.将右子树构造成双链表,并返回链表头节点 TreeNode right = NodeConvert(root.right); // 5.如果右子树链表不为空的话,将该链表追加到root节点之后 if (right != null) { right.left = root; root.right = right; } return left != null ? left : root; }}
阅读全文
0 0
- 剑指offer_二叉树---二叉搜索树与双向链表
- 剑指Offer_面试题27_二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- easyui datagrid 去掉全选按钮
- IPad Pro 12.9英寸版本的界面适配
- Oracle之游标
- SQL 聚集函数
- UVa 1585 Score
- 剑指offer_二叉树---二叉搜索树与双向链表
- maven
- 谈谈你对闭包的理解
- LinkedList实现
- ICS bomblab总结
- Linux vi命令修改文件及保存总结
- javascript 函数表达式
- 点击改变选项背景图(或其他)
- SPI 的主模式和从模式