根据前序遍历,中序遍历,构建二叉树

题目是牛客网的,感觉这题十分的巧妙

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        return recursion(pre,0,pre.length-1,in,0,in.length-1);
    }
    
    public TreeNode recursion(int[] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){
        if(preStart>preEnd||inStart>inEnd){
            return null;
        }
        TreeNode node=new TreeNode(pre[preStart]);
        for(int i=inStart;i<=inEnd;i++){
            if(pre[preStart]==in[i]){
                node.left=recursion(pre,preStart+1,preStart+i-inStart,in,inStart,i-1);
                node.right=recursion(pre,preStart+i-inStart+1,preEnd,in,i+1,inEnd);
                break;
            }
        }
        return node;
    }
}

用了递归 加分治法。那时真的🐮🍺

posted @ 2019-11-13 11:04  你还未发现  阅读(163)  评论(0编辑  收藏  举报