首页 > 其他 > 详细

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

时间:2018-11-13 17:47:45      阅读:192      评论:0      收藏:0      [点我收藏+]
    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]*前序后序遍历形成树

原文:https://www.cnblogs.com/inku/p/9953470.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!