[Leetcode 105]*前序后序遍历形成树

Posted leetcode刷题中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Leetcode 105]*前序后序遍历形成树相关的知识,希望对你有一定的参考价值。

    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]*前序后序遍历形成树的主要内容,如果未能解决你的问题,请参考以下文章

树的非递归遍历——前序中序后序

树的三种DFS策略(前序中序后序)遍历

二叉树前序中序后序遍历(非递归统一解法)

二叉树的前序中序后序遍历相互求法

已知前序中序求后续;已知中序后序求前序;

二叉树前序中序后序遍历相互求法