题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
题目链接:https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
解题思路
解法1:迭代(非递归)思路,模拟中序遍历,记录上一个遍历的节点,同当前节点进行双向指向
解法2:递归法
/**
* 解法1:迭代(非递归)法
*/
import java.util.Stack;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null) return null;
Stack<TreeNode> stack = new Stack<>();
TreeNode root = null;
TreeNode p = pRootOfTree;
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;
pre = p;
isFirst = false;
} else {
pre.right = p;
p.left = pre;
pre = p;
}
p = p.right;
}
return root;
}
}