zoukankan      html  css  js  c++  java
  • [Leetcode 79] 106 Construct Binary Tree from Inorder and Postorder Traversal

    Problem:

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

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

    Analysis:

    This problem is the same as the former one of reconstructing the binary tree with inorder and preorder traversal array.

    The only difference is that now the root is always at the end of the given array.

    A comparison of the two problem's solving is as follows:

    Post & In:

    t->left = build(in, is, idx-1, post, ps, ps+idx-is-1);
    t->right = build(in, idx+1, ie, post, ps+idx-is, pe-1);

    Pre & In:

    t->left = fun(in, is, idx-1, pre, ps+1, ps+idx-is);

    t->right = fun(in, idx+1, ie, pre, ps+idx-is+1, pe);

    We can see that the sub-array for in is the same of the two solution. The difference comes from the latter part. 

    Code:

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
    13         // Start typing your C/C++ solution below
    14         // DO NOT write int main() function
    15         return build(inorder, 0, inorder.size()-1, 
    16                     postorder, 0, postorder.size()-1);
    17     }
    18     
    19 private:
    20     TreeNode *build(vector<int> &in, int is, int ie,
    21                     vector<int> &post, int ps, int pe) {
    22         if (is > is || ps > pe)
    23             return NULL;
    24         
    25         TreeNode *t = new TreeNode(post[pe]);     
    26         int idx = search(in, is, ie, post[pe]);
    27 
    28         t->left = build(in, is, idx-1, post, ps, ps+idx-is-1);
    29         t->right = build(in, idx+1, ie, post, ps+idx-is, pe-1);
    30 
    31         return t;
    32     }
    33     
    34     int search(vector<int> &in, int s, int e, int v) {
    35         int idx;
    36         for (idx=s; idx<=e; idx++)
    37             if (in[idx] == v)
    38                 break;
    39                 
    40         return idx;
    41     }
    42 };
    View Code
  • 相关阅读:
    highcharts延迟加载及刷新数据
    canvas实现固定元素背景雪花效果
    jquery自定义分页插件(带回调函数)
    sqlserver error 40解决方案
    canvas实现刮图效果
    canvas转换图像格式及尺寸
    CentOS 7上安装.Net Core运行环境
    centos环境下docker安装redis并挂载外部配置和数据
    Linux mv命令
    .NetCore 3.x Signalr JavaScript客户端使用
  • 原文地址:https://www.cnblogs.com/freeneng/p/3207829.html
Copyright © 2011-2022 走看看