已知中序,前序,重组二叉树

TreeNode类

public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x;this.left=null;this.right=null; }
}
Solution类

注:if(len==0){...}必须写上,因为那是递归的终止条件,而且位置也很重要

public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        
        int len = in.length;//获得数组的长度
        if(len==0){//当长度为0时,终止递归
        	return null;
        }
        int[] left_pre,left_in,right_pre,right_in;//左子树前序、左子树中序、右子树前序、右子树中序
        TreeNode head =new TreeNode(pre[0]);
        int gen = 0;
        for(int i=0;i<len;i++){//获得根节点的位置
            if(in[i]==pre[0]){
                gen = i;
                break;
            }
        }
        //根据根节点的位置为各个数组开辟空间
        left_pre = new int [gen];
        left_in = new int [gen];
        right_pre = new int [len-gen-1];
        right_in = new int [len-gen-1];
        for(int i=0;i<gen;i++){          
            left_pre[i]=pre[i+1];
            left_in[i]=in[i];
        }
        for(int i=gen+1;i<len;i++){
            right_pre[i-gen-1]=pre[i];
            right_in[i-gen-1]=in[i];
        }
        //递归
        head.left = reConstructBinaryTree(left_pre,left_in);
        head.right = reConstructBinaryTree(right_pre,right_in);
        return head;
    }
    public static void main(String []args ){
    	Solution s = new Solution();
    	int i[] ={1,2,4,7,3,5,6,8};
    	int j[] = {4,7,2,1,5,3,8,6};
    	TreeNode t=s.reConstructBinaryTree(i, j);
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值