zoukankan      html  css  js  c++  java
  • leetcode -- Construct Binary Tree from Inorder and Postorder Traversal

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

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

    [解题思路]

    与上题类似Construct Binary Tree from Preorder and Inorder Traversal 确定左右子树的序列,

    递归建立树,唯一不同在于后序遍历,根节点在最后一个元素

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode buildTree(int[] inorder, int[] postorder) {
    12         // Start typing your Java solution below
    13         // DO NOT write main() function
    14         if (postorder == null || inorder == null) {
    15             return null;
    16         }
    17         int postLen = postorder.length;
    18         int inLen = inorder.length;
    19         if (postLen == 0 || inLen == 0) {
    20             return null;
    21         }
    22 
    23         return constructTree(postorder, 0, postLen - 1, inorder, 0, inLen - 1);
    24     }
    25     
    26     public static TreeNode constructTree(int[] postorder, int postStart, int postEnd,
    27             int[] inorder, int inStart, int inEnd) {
    28         int rootVal = postorder[postEnd];
    29         TreeNode root = new TreeNode(rootVal);
    30         root.left = null;
    31         root.right = null;
    32         
    33         if(postStart == postEnd && postorder[postStart] == inorder[inStart]){
    34             return root;
    35         }
    36         
    37         int i = inStart;
    38         for(; i <= inEnd; i++){
    39             if(inorder[i] == rootVal){
    40                 break;
    41             }
    42         }
    43         int leftLen = i - inStart;
    44         if(leftLen > 0){
    45             root.left = constructTree(postorder, postStart, postStart + leftLen - 1,
    46                     inorder, inStart, i - 1);
    47         }
    48         if(inEnd > i){
    49             root.right = constructTree(postorder, postStart + leftLen, postEnd - 1,
    50                     inorder, i + 1, inEnd);
    51         }
    52         return root;
    53     }
    54 }
  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/feiling/p/3277053.html
Copyright © 2011-2022 走看看