您的位置:首页 > Web前端

剑指offer:二叉搜索树与双向链表

2017-08-07 22:03 274 查看
题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
【运行时间: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息