输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
正确:

TreeNode pre = null; public TreeNode Convert(TreeNode pRootOfTree) { if (pRootOfTree == null) return null; Convert1(pRootOfTree); TreeNode res = pRootOfTree; while (res.left != null) res = res.left; return res; } public void Convert1(TreeNode pRootOfTree) { if (pRootOfTree == null) return; Convert1(pRootOfTree.left); System.out.print("1:"); System.out.println(pre == null ? "null" : pre.val); // 记录链表中当前节点的前一个节点 pRootOfTree.left = pre; if (pre != null) pre.right = pRootOfTree; pre = pRootOfTree; System.out.print("2:"); System.out.println(pre == null ? "null" : pre.val); Convert1(pRootOfTree.right); }
错误:

public TreeNode Convert(TreeNode pRootOfTree) { if (pRootOfTree == null) return null; TreeNode pre = null; Convert(pRootOfTree, pre); TreeNode res = pRootOfTree; while (res.left != null) res = res.left; return res; } public void Convert(TreeNode pRootOfTree, TreeNode pre) { if (pRootOfTree == null) return; Convert(pRootOfTree.left, pre); System.out.print("1:"); System.out.println(pre == null ? "null" : pre.val); // 记录链表中当前节点的前一个节点 pRootOfTree.left = pre; if (pre != null) pre.right = pRootOfTree; pre = pRootOfTree; System.out.print("2:"); System.out.println(pre == null ? "null" : pre.val); Convert(pRootOfTree.right, pre); }