题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
CODE
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Stack;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
// 使用非递归中序遍历
if (pRootOfTree == null)
return null;
Stack<TreeNode> stack = new Stack<TreeNode>();
boolean isFirst = true;
TreeNode p = pRootOfTree;
TreeNode pre = null; // 保存中序遍历的上一个结点
while (p != null || !stack.isEmpty()){
while (p != null){
stack.push(p); // 将结点压栈
p = p.left;
}
p = stack.pop();
if (isFirst){ // 是否是中序遍历的第一个结点,要当链表的头结点
pRootOfTree = p;
pre = pRootOfTree;
isFirst = false;
}else {
pre.right = p;
p.left = pre;
pre = p;
}
p = p.right;
}
return pRootOfTree;
}
}