题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
【运行时间:13ms 占用内存:8272k】
方法1:递归
利用中序遍历的递归形式代码
public class Solution {
TreeNode result=null;
TreeNode node=null;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null) return pRootOfTree;
Convert(pRootOfTree.left);
if(node==null){
result=pRootOfTree;
node=pRootOfTree;
}else{
node.right=pRootOfTree;
pRootOfTree.left=node;
node=pRootOfTree;
}
Convert(pRootOfTree.right);
return result;
}
}
方法2:非递归形式
从后往前创建树,返回最后一个list节点
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null) return pRootOfTree;
TreeNode list=null;
Stack<TreeNode> stack=new Stack<TreeNode>();
while(pRootOfTree!=null||!stack.isEmpty()){
if(pRootOfTree!=null){
stack.push(pRootOfTree);
pRootOfTree=pRootOfTree.right;
}else{
pRootOfTree=stack.pop();
if(list==null){
list=pRootOfTree;
}else{
list.left=pRootOfTree;
pRootOfTree.right=list;
list=pRootOfTree;
}
pRootOfTree=pRootOfTree.left;
}
}
return list;
}