• 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;
        }
        
    }
  • 相关阅读:
    uva11025 The broken pedometer
    uva131 The Psychic Poker Player
    子集生成算法
    uva10167 Birthday Cake
    poj1129 Channel Allocation
    poj2676 Sudoku
    Emacs杂谈(一)Emacs环境 c++ 快捷键
    poj1416 Shredding Company
    英文报刊推荐
    搜索练习(二)工作效益
  • 原文地址:https://www.cnblogs.com/null00/p/5118092.html
Copyright © 2020-2023  润新知