• 重建二叉树


    题目描述:

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    解题思路:

    具体二叉树遍历很多博客都有讲,不再详细描述。

    前序遍历:根、左、右

    中序遍历:左、根、右

    因此,前序遍历的第一个节点为根节点,到中序遍历的序列中找到该根节点的位置,左侧为该根节点的左子树,右侧为其右子树。在前序遍历中对应找到两棵子树的前序遍历序列,即找到了左子树的前序遍历和中序遍历,右子树的前序遍历和中序遍历。可以递归完成。

    用索引的方式找到对应的前序和中序遍历。

    代码:

     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 {
    12 public:
    13     TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin)
    14     {
    15         int pS = 0,iS = 0;
    16         int pE = pre.size();
    17         int iE = vin.size();
    18         return find(pre,vin,pS,pE,iS,iE);
    19     }
    20     TreeNode* find(vector<int> pre,vector<int> vin,int pS,int pE,int iS,int iE)
    21     {
    22         //getchar();
    23         TreeNode *root = new TreeNode(0);
    24         int pos = -1;
    25         if(pS == pE || iS == iE)
    26         {
    27             return NULL;
    28         }
    29         //cout << pre[0]<< endl;
    30         for(int i = iS; i < iE; i++)
    31         {
    32             if(vin[i] == pre[pS])
    33             {
    34                 pos = i;
    35                 break;
    36             }
    37         }
    38         if(pos == -1)
    39             return NULL;
    40         root->val = pre[pS];
    41         int offset = pos - iS;
    42         root->left = find(pre,vin,pS + 1,pS + offset + 1,iS,pos);
    43         root->right = find(pre,vin,pS + offset + 1,pE,pos + 1,iE);
    44         return root;
    45     }
    46 };
  • 相关阅读:
    Vue如何下载文件?
    vue用template还是JSX?
    2020年的第一件事,我取关了97个公众号
    月经贴 | 2019.12
    CSS——盒子模型(含详解)
    CSS——字体、文本、背景属性设置
    CSS——选择器(三大特性)
    CSS——选择器(本篇介绍八类多种)
    CSS——简介
    WEB前端——body内常用标签(form标签)
  • 原文地址:https://www.cnblogs.com/wktwj/p/8584963.html
Copyright © 2020-2023  润新知