zoukankan      html  css  js  c++  java
  • 递归之重建二叉树

    题目来自“剑指offer”中的第四题,链接:https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    主要借助这些题加强对递归的使用;

    代码如下:

    /**
      
         * Definition for binary tree
      
         * struct TreeNode {
      
         *     int val;
      
         *     TreeNode *left;
      
         *     TreeNode *right;
      
         *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
      
         * };
      
         */
      
        class Solution {
      
        public:
      
            struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
      
                int inlen=in.size();
      
                if(inlen==0)  //递归的基准条件,即跳出递归的条件
      
                    return NULL;
           //递归不断演进,按照人的思考进行 vector
    <int> left_pre,right_pre,left_in,right_in; //创建根节点,根节点肯定是前序遍历的第一个数 TreeNode* head=new TreeNode(pre[0]); //找到中序遍历根节点所在位置,存放于变量gen中 int gen=0; for(int i=0;i<inlen;i++) { if (in[i]==pre[0]) { gen=i; break; } } //对于中序遍历,根节点左边的节点位于二叉树的左边,根节点右边的节点位于二叉树的右边 //利用上述这点,对二叉树节点进行归并 for(int i=0;i<gen;i++) { left_in.push_back(in[i]); left_pre.push_back(pre[i+1]);//前序第一个为根节点 } for(int i=gen+1;i<inlen;i++) { right_in.push_back(in[i]); right_pre.push_back(pre[i]); } //和shell排序的思想类似,取出前序和中序遍历根节点左边和右边的子树 //递归,再对其进行上述所有步骤,即再区分子树的左、右子子数,直到叶节点 head->left=reConstructBinaryTree(left_pre,left_in); head->right=reConstructBinaryTree(right_pre,right_in); return head;
  • 相关阅读:
    python主流框架简介和Django框架的使用
    如何确定计算上已安装的.NET framework版本
    访问另一台主机时报错0x80004005
    sql server自动备份数据库
    sql server创建维护计划报错“不是有效的win32”
    sql server agent代理备份数据库报错‘用户 'sa' 登录失败’
    sql server日志查错
    windows10安装64位Orcale 19c
    触发器基本知识
    MediaElement 的两种模式
  • 原文地址:https://www.cnblogs.com/zf-blog/p/9839046.html
Copyright © 2011-2022 走看看