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

    数据结构的基础知识,根据中序、后序遍历或者先序、中序遍历构建二叉树;

    典型的递归;

    中序、后序的代码:

     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         int m = inorder.size();
    16         int n = postorder.size();
    17         if (m != n || !m || !n) {
    18             return NULL;
    19         }
    20         return build(inorder, 0, m - 1, postorder, 0, n - 1);
    21     }
    22     TreeNode *build(vector<int> &inorder, int m1, int m2, vector<int> &postorder, int n1, int n2) {
    23         if (m1 > m2) {
    24             return NULL;
    25         }
    26         TreeNode* node = new TreeNode(postorder[n2]);
    27         int i;
    28         for (i = m1; i <= m2; ++i) {
    29             if (inorder[i] == postorder[n2]) {
    30                 break;
    31             }
    32         }
    33         node->left = build(inorder, m1, i - 1, postorder, n1, n1 + i - 1 - m1);
    34         node->right = build(inorder, i + 1, m2, postorder, n2 - m2 + i, n2 - 1);
    35         return node;
    36     }
    37 };

    先序、中序的代码:

     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> &preorder, vector<int> &inorder) {
    13         // Start typing your C/C++ solution below
    14         // DO NOT write int main() function
    15         int m = preorder.size();
    16         int n = inorder.size();
    17         if (m != n || !m || !n) {
    18             return NULL;
    19         }
    20         return build(preorder, 0, m - 1, inorder, 0, n - 1);
    21     }
    22     TreeNode *build(vector<int> &preorder, int m1, int m2, vector<int> &inorder, int n1, int n2) {
    23         if (m1 > m2) {
    24             return NULL;
    25         }
    26         int i;
    27         for(i = n1; i <= n2; ++i) {
    28             if (inorder[i] == preorder[m1]) {
    29                 break;
    30             }
    31         }
    32         TreeNode* node = new TreeNode(preorder[m1]);
    33         node->left = build(preorder, m1 + 1, i - n1 + m1, inorder, n1, i - 1);
    34         node->right = build(preorder, i - n1 + m1 + 1, m2, inorder, i + 1, n2);
    35         return node;
    36     }
    37 };
  • 相关阅读:
    阿里云:面向5G时代的物联网无线连接服务
    走近科学,探究阿里闲鱼团队通过数据提升Flutter体验的真相
    Redis 5.0新功能介绍
    阿里云发布 Redis 5.0 缓存服务:全新 Stream 数据类型带来不一样缓存体验
    荣获“5G MEC优秀商用案例奖”,阿里云边缘计算发力新零售
    阿里云亮相2019联通合作伙伴大会,边缘计算等3款云产品助力5G时代产业数字化转型
    noip2014 寻找道路
    noip2014 无线网络发射器选址
    noip2014 联合权值
    noip2013 华容道
  • 原文地址:https://www.cnblogs.com/chasuner/p/treeorder.html
Copyright © 2011-2022 走看看