您的位置:首页 > 其它

重建二叉树

2014-05-28 09:16 239 查看
剑指offer第六题,自己很快得出了由先序和中序遍历得出树的结构的思路,但是实现起来遇到了一些困难,花了不少时间

package com.zjy.sword2offer;

class TreeNode{
int val;
TreeNode left;
TreeNode right;
}

public class ReconstructTree {
public TreeNode ReconstrTree(int[] a, int[] b) throws Exception{
if(a==null||b==null||a.length<=0||b.length<=0)
return null;

if(a.length!=b.length)
return null;
return ReconstrTreeCore(a, 0,a.length-1, b,0,a.length-1);
}

public TreeNode ReconstrTreeCore(int[] a,int prestart,int preend,
int[] b,int instart,int inend) throws Exception{
int rootvalue = a[prestart];
TreeNode root = new TreeNode();
root.val = rootvalue;
root.left = root.right =null;

if(prestart==preend)
{
if(instart==inend && a[preend]==b[inend])
return root;
else
throw new Exception("invalid input");
}

int rootinorder = instart;
while(rootinorder<inend && a[rootinorder]!=rootvalue)
rootinorder++;

if(rootinorder==inend&&a[rootinorder]!=rootvalue)
new Exception("invalid input");

int leftTreeLen = rootinorder - instart;
if(leftTreeLen>0)
{
root.left = ReconstrTreeCore(a,prestart+1,prestart+leftTreeLen,
b,instart,rootinorder-1);
}
if(leftTreeLen<preend-prestart)
{
root.right = ReconstrTreeCore(a,prestart+leftTreeLen+1,preend,
b,rootinorder+1,inend);
}

return root;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: