1. 程式人生 > >[Leetcode 105]*前序後序遍歷形成樹

[Leetcode 105]*前序後序遍歷形成樹

flag str 前序 div 後序 treenode value bsp node

    public TreeNode find(int[] preorder, int[] inorder,int j, int start, int end) {
        if (j > preorder.length - 1 || start > end) {
            return null;
        }
        TreeNode root = new TreeNode(preorder[j]);
        int flag = 0; 
       
        for (int i = start; i <= end; i++) {
            
if (inorder[i] == root.val) { flag = i; } } root.left = find(preorder, inorder,j + 1,start, flag - 1); root.right = find(preorder, inorder,j + flag - start + 1, flag + 1, end); return root; }

so basically flag-start is size of the roots left subtree,

therefore to get the start of right subtree you gotta get to the start of the first value of right subtree within preorder.

relative start of the root + left + right tree (j) + left sub tree size (flag - start) + 1 (the root).

【flag-start】左子樹的大小

【j】前序從j基礎上開始遍歷的

【+1】根節點

【前序遍歷位置】=【基礎位置J】+【左子樹大小FLAG-START】+【下一節點1】

[Leetcode 105]*前序後序遍歷形成樹