zoukankan      html  css  js  c++  java
  • LeetCode

    题目:

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

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

    思路:

    递归,根节点是postorder的最后一个节点

    package treetraversal;
    
    public class ConstructBinaryTreeFromInorderAndPostorderTraversal {
    
        public TreeNode buildTree(int[] inorder, int[] postorder) {
            return construct(postorder, 0, postorder.length - 1, inorder, 0, inorder.length - 1);
        }
        
        private TreeNode construct(int[] postorder, int pstart, int pend, int[] inorder, int istart, int iend) {
            if (pstart > pend || istart > iend) return null;
            int rootVal = postorder[pend];
            int index = -1;
            for (int i = istart; i <= iend; ++i) {
                if (inorder[i] == rootVal) {
                    index = i;
                    break;
                }
            }
            
            TreeNode root = new TreeNode(rootVal);        
            root.left = construct(postorder, pstart, pstart + index - istart - 1, inorder, istart, index - 1);
            root.right = construct(postorder, pstart + index - istart, pend - 1, inorder, index + 1, iend);
            return root;
        }
        
    }
  • 相关阅读:
    dp思维
    快速幂+地推
    背包问题找物品
    石子合并问题
    hihocoder 1580 Matrix(北京icpc2017网络赛)
    ACM对拍造数据
    主席树学习小结(POJ 2104)
    莫队算法入门 BZOJ 2038
    hdu 2586
    Kattis
  • 原文地址:https://www.cnblogs.com/null00/p/5118092.html
Copyright © 2011-2022 走看看