分解让复杂问题简单化:二叉搜索树与双向链表
2016-08-30 11:04
274 查看
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if (pRootOfTree == null) { return null; } if (pRootOfTree.left == null && pRootOfTree.right == null) { return pRootOfTree; } // 1.将左子树构造成双链表,并返回链表头节点 TreeNode left = Convert(pRootOfTree.left); TreeNode p = left; // 2.定位至左子树双链表最后一个节点 while (p != null && p.right != null) { p = p.right; } // 3.如果左子树链表不为空的话,将当前root追加到左子树链表 if (left != null) { p.right = pRootOfTree; pRootOfTree.left = p; } // 4.将右子树构造成双链表,并返回链表头节点 TreeNode right = Convert(pRootOfTree.right); // 5.如果右子树链表不为空的话,将该链表追加到root节点之后 if (right != null) { right.left = pRootOfTree; pRootOfTree.right = right; } return left != null ? left : pRootOfTree; } }
相关文章推荐
- 【剑指offer】4.4分解让复杂问题简单化——面试题27:二叉搜索树与双向链表
- 【剑指offer】4.4分解让复杂问题简单化——面试题26:复杂链表的复制
- 分解让复杂问题简单化-面试题27-二叉搜索树与双向链表
- 分解让复杂问题简单化:复杂链表的复制
- 剑指offer:(26)分解让复杂问题简单化 :复杂链表的复制
- 剑指offer:(27)分解让复杂问题简单化 :二叉搜索树与双链表
- 剑指offer 4.4 分解简化问题2-二叉搜索树转双向链表
- 【剑指offer】4.4分解让复杂问题简单化——面试题28:字符串的排列
- (C++)剑指offer-25:复杂链表的复制(分解让复杂问题简单)(再理解)
- 《剑指offer》刷题笔记(分解让复杂问题简单):二叉搜索树与双向链表
- (C++)剑指offer-26:二叉搜索树与双向链表(分解让复杂问题简单)
- ##剑指offer 4.4 分解简化问题1-复杂链表的复制
- 分解让复杂问题简单化:字符串的排列
- 剑指offer:(28)分解让复杂问题简单化 :字符串的排列
- 《剑指offer》刷题笔记(分解让复杂问题简单):复杂链表的复制
- 链表问题----复杂链表的复制+二叉搜索树与双向链表(Java)
- 分解让复杂问题简单化-面试题28-字符串的排列与组合
- 换位思考权限设计(把复杂的问题,简单化才是水平,用简单的道理解决复杂的问题)
- 二叉搜索树转换为双向链表
- 委托与事件使用精简案例—将复杂问题简单化