zoukankan      html  css  js  c++  java
  • 根据二叉树的前序遍历和中序遍历重建二叉树

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 
    11    struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
    12         if(pre.size()==0||in.size()==0)
    13         {
    14             return NULL;
    15         }    
    16         if(pre.size()==1)
    17         {
    18             return new TreeNode(pre.front());
    19         }        
    20         if(in.size()==1)
    21         {
    22             return new TreeNode(in.front());
    23         }
    24         int node_Val=pre.front();//用来存根节点的值
    25         auto node_in=find(in.begin(),in.end(),node_Val);//根节点在in的位置
    26         
    27         //左子树区间
    28         vector<int> left_in_Block(in.begin(),node_in);
    29         int move=node_in-in.begin();
    30         vector<int> left_pre_Block(++pre.begin(),pre.begin()+move+1);
    31         
    32         //右子树区间
    33         vector<int> right_in_Block(++node_in,in.end());
    34         vector<int> right_pre_Block(pre.begin()+move+1,pre.end());
    35         
    36         TreeNode *node=new TreeNode(node_Val);//根节点
    37         node->left=reConstructBinaryTree(left_pre_Block,left_in_Block);
    38         node->right=reConstructBinaryTree(right_pre_Block,right_in_Block);
    39         return node;
    40     }
  • 相关阅读:
    【梦断代码】与我们队的相似之处
    梦断代码 之 你失败过吗
    梦断代码 之 程序人生
    C#中父类转换为子类
    C#中Dictionary泛型集合7种常见的用法
    Linux 常见命令 目录处理指令
    使用XSLT+XML生成网页
    我心目中的Asp.net核心对象
    配色速成
    VS.NET中JavaScript隐藏特性
  • 原文地址:https://www.cnblogs.com/firstcxj/p/4822271.html
Copyright © 2011-2022 走看看