题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
import java.util.LinkedList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode root) {
if(null == root){
return null;
}
LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
while(null != root || !stack.isEmpty()){
if(null != root){
stack.push(root);
root = root.left;
}else{
root = stack.pop();
list.add(root);
root = root.right;
}
}
TreeNode result = new TreeNode(-1);
TreeNode node = result;
while(!list.isEmpty()){
TreeNode tmp = list.pop();
node.right = tmp;
tmp.left = node;
node = tmp;
}
node.right = null;
result.right.left = null;
return result.right;
}
}