https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5
描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解析
中序遍历即可。注意保存前一个节点的值。
代码
public TreeNode ConvertBSTToBiList(TreeNode root) { if(root==null) return null; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; TreeNode pre = null;// 用于保存中序遍历序列的上一节点 boolean isFirst = true; while(p != null|| !stack.isEmpty()) { while (p != null){ stack.push(p); p = p.left; } p = stack.pop(); if (isFirst) { root = p;// 将中序遍历序列中的第一个节点记为root pre = root; isFirst = false; } else { pre.right = p; p.left = pre; pre = p; } p = p.right; } return root; }