LeetCode-105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出 

前序遍历 preorder = [3,9,20,15,7]

中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7

思路:

       由于先序的顺序的第一个肯定是根,所以原二叉树的根节点可以知道,题目中给了一个很关键的条件就是树中没有相同元素,有了这个条件我们就可以在中序遍历中也定位出根节点的位置,并以根节点的位置将中序遍历拆分为左右两个部分,分别对其递归调用原函数。

 public TreeNode buildTree(int[] pre, int[] in) {
    if(preorder == null || inorder == null) return null;
    if(preorder.length == 0 || inorder.length == 0) return null;
    if(preorder.length != inorder.length) return null;
    TreeNode root = new TreeNode(pre[0]);
    for(int i = 0; i < in.length; i++){
        if(pre[0] = in[i]){
            root.left = buildTree(Arrays.copyOfRange(pre, 1, i + 1), Arrays.copyOfRange(in, 0, i));
            root.right= buildTree(Arrays.copyOfRange(pre, i + 1, pre.length), Arrays.copyOfRange(in, i + 1, in.length));
        }
    }
    return root;
 }

猜你喜欢

转载自blog.csdn.net/qq_43322057/article/details/84196069