美文网首页
105. Construct Binary Tree from

105. Construct Binary Tree from

作者: 衣介书生 | 来源:发表于2018-04-08 20:46 被阅读5次

    题目分析

    Given preorder and inorder traversal of a tree, construct the binary tree.

    Note:
    You may assume that duplicates do not exist in the tree.

    For example, given

    preorder = [3,9,20,15,7]
    inorder = [9,3,15,20,7]
    

    Return the following binary tree:

        3
       / \
      9  20
        /  \
       15   7
    

    根据树得前序遍历结果和中序遍历结果构造二叉树

    代码

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            if(inorder.length != preorder.length) {
                return null;
            }
            return myBuildTree(inorder, 0, inorder.length - 1, preorder, 0, preorder.length - 1);
        }
        
        public TreeNode myBuildTree(int[] inorder, int instart, int inend, int[] preorder, int prestart, int preend) {
            if(instart > inend) {
                return null;
            }
            // 创建根节点
            TreeNode root = new TreeNode(preorder[prestart]);
            int position = findPosition(inorder, instart, inend, preorder[prestart]);
            // position - instart 就是左子树结点数目
            root.left = myBuildTree(inorder, instart, position - 1, preorder, prestart + 1, prestart + position - instart);
            root.right = myBuildTree(inorder, position + 1, inend, preorder, position - inend + preend + 1, preend);
            return root;
        }
        
        public int findPosition(int[] arr, int start, int end, int key) {
            for(int i = start; i <= end; i++) {
                if(arr[i] == key) {
                    return i;
                }
            }
            return -1;
        }
    }
    

    相关文章

      网友评论

          本文标题:105. Construct Binary Tree from

          本文链接:https://www.haomeiwen.com/subject/jrgmhftx.html