zoukankan      html  css  js  c++  java
  • leetcode105—— 从前序与中序遍历序列构造二叉树

     1 /*
     2  * @lc app=leetcode.cn id=105 lang=cpp
     3  *
     4  * [105] 从前序与中序遍历序列构造二叉树
     5  */
     6 
     7 // @lc code=start
     8 /**
     9  * Definition for a binary tree node.
    10  * struct TreeNode {
    11  *     int val;
    12  *     TreeNode *left;
    13  *     TreeNode *right;
    14  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    15  * };
    16  */
    17 class Solution {
    18 public:
    19     /*
    20     1)前序数组的第一个元素为根节点,根据根节点可将中序数组划分为左子树中序列表和右子树中序数组
    21     2)又因为一棵树的中序数组长度与前序数组长度大小相同,所以可以根据长度划分前序数组为左右子树前序数组
    22     3)对于根的左右结点,递归调用即可
    23     */
    24     TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
    25        if(preorder.empty()||inorder.empty()) return nullptr;
    26 
    27        TreeNode *root=new TreeNode(*preorder.begin());//begin返回的是迭代器,要取值的话加 *
    28 
    29        auto it=find(inorder.begin(),inorder.end(),*preorder.begin());
    30 
    31        vector<int> inleft(inorder.begin(),it); //左闭右开,所以inleft不包含it这个值
    32        vector<int> inright(it+1,inorder.end());//加 1是为了跳过根节点
    33        int sz=inleft.size();
    34        vector<int> preleft(preorder.begin()+1,preorder.begin()+1+sz);
    35        vector<int> preright(preorder.begin()+1+sz,preorder.end());
    36        root->left=buildTree(preleft,inleft);
    37        root->right=buildTree(preright,inright);
    38 
    39        return root;
    40 
    41     }
    42 };
    43 // @lc code=end
  • 相关阅读:
    listView控件演示程序
    猪悟能淘宝商品下载专家v3版开发手记
    c# WebClient类
    分隔控件splitter演示程序
    C#中SESSIONID的获取
    工具栏toolBar演示程序
    Cookie总结
    C#获取网页源码并且自动判断网页字符集编码
    如何在Google Code上建立私有代码版本库
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
  • 原文地址:https://www.cnblogs.com/yaodao12/p/13934428.html
Copyright © 2011-2022 走看看