输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
对这棵二叉搜索树中序遍历,然后修改指针并将双链表的头指针返回,然后合并左边双链表,根节点,右边双链表
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { PRivate TreeNode doConvert(TreeNode root){ if(root == null)return null ; TreeNode leftRe = doConvert(root.left) ; TreeNode rightRe = doConvert(root.right) ; TreeNode ll = root ; root.left=root ; root.right=root ; if(leftRe != null){ merge(leftRe , root) ; ll = leftRe ; } if(rightRe != null){ merge(ll , rightRe) ; } return ll ; } public TreeNode Convert(TreeNode root) { TreeNode head = doConvert(root) ; if(head == null)return null ; head.left.right = null ; head.left = null ; return head ; } private void merge(TreeNode leftLeft , TreeNode rightLeft){ TreeNode leftRight = leftLeft.left ; TreeNode rightRight = rightLeft.left ; leftRight.right = rightLeft ; rightLeft.left = leftRight ; leftLeft.left = rightRight ; rightRight.right = leftLeft ; }}
新闻热点
疑难解答