重建二叉树

来源:互联网 发布:javascript实现trie树 编辑:程序博客网 时间:2024/05/22 05:22

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路也很简单就是递归,二分,不许要想那么多吧两个数组的左右都穿进去

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {     public TreeNode Built(int prestart,int preend,int[] pre,int[] in,int instart,int inend ) {         int index = 0; if(prestart>preend || instart>inend) {  return null; }// T = pre[start]; TreeNode p =new TreeNode(pre[prestart]); //p.val =]; for(int i=instart;i<=inend;i++) { if(pre[prestart]==in[i])  { index=i; break; } } p.left = Built(prestart+1,preend+index-instart,pre,in,instart,index-1); p.right = Built(prestart+1+index-instart,preend,pre,in,index+1,inend); return p; }    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {        TreeNode p=null;     p = Built(0,pre.length-1,pre,in,0,in.length-1);     return p;    }}

不过有一点必须要注意,就是pre的开始与结尾,in数组因为固定了,所以就是普通的加一减一

但是pre不一样,有可能了要跳,左边树调到右边去,所以在个p.right赋值时,一定要考虑到他的左边已经不是start了,而是start+左子树长度(这样剩下的才是右子树)

原创粉丝点击