zoukankan      html  css  js  c++  java
  • 【剑指offer】重建二叉树

    题目链接:重建二叉树

    题意根据前序和中序建二叉树

    题解:数据结构里大家做前序中序建二叉树的题应该很熟了。这个题就是将思考过程用代码模拟一遍。

    前序数组的第一个节点pre[0]就是根节点 ,在中序数组中找到这个根节点,以此划分左子树和右子树。

    递归遍历到叶节点即可。

    代码:

     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* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
    13         int len = pre.size();
    14         if(len == 0)    return NULL;
    15         
    16         vector<int> left_pre,right_pre,left_vin,right_vin;
    17         TreeNode* tree = new TreeNode(pre[0]);
    18         int root = 0;
    19         for(int i = 0; i < len; i++){
    20             if(pre[0] == vin[i]){//根结点在中序中的位置
    21                 root = i;
    22                 break;
    23             }
    24         }
    25         //左子树
    26         for(int i = 0 ;i < root ;i++){
    27             left_pre.push_back(pre[i+1]);
    28             left_vin.push_back(vin[i]);
    29         }
    30         //右子树
    31         for(int i = root+1; i < len ;i++){
    32             right_pre.push_back(pre[i]);
    33             right_vin.push_back(vin[i]);
    34         }
    35         //递归遍历
    36         tree->left=reConstructBinaryTree(left_pre,left_vin);
    37         tree->right=reConstructBinaryTree(right_pre,right_vin);
    38         return tree;
    39     }
    40 };
  • 相关阅读:
    VB与SQL Server实现文件上传下载
    rszl数据表和crjsj数据表的关联查询
    网吧忘关QQ的后果
    走 近 WSH
    形容长得丑的30句经典句子
    关机VBS脚本
    C51单片机中断定义
    .NET架构的核心技术
    SQL SERVER的命令行工具Osql的用法
    七七情人节
  • 原文地址:https://www.cnblogs.com/Asumi/p/12398297.html
Copyright © 2011-2022 走看看