day18 根据一棵树的中序遍历与后序遍历构造二叉树

第一步:如果数组大小为零的话,说明是空节点了

第二步:如果不为空,那么取后序数组最后一个元素作为节点元素,找到根节点

第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点

第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)

第五步:切割后序数组,切成后序左数组和后序右数组

第六步:递归处理左区间和右区间

 

    TreeNode* traversal (vector<int>& inorder, vector<int>& postorder) {

        if (postorder.size() == 0) return NULL;

 

        // 后序遍历数组最后一个元素,就是当前的中间节点

        int rootValue = postorder[postorder.size() - 1];

 

        TreeNode* root = new TreeNode(rootValue);

 

        // 叶子节点

        if (postorder.size() == 1) return root;

 

        // 找到中序遍历的切割点

        int delimiterIndex;

        for (delimiterIndex = 0; delimiterIndex < inorder.size(); delimiterIndex++) {

            if (inorder[delimiterIndex] == rootValue) break;

        }

 

        // 切割中序数组

        // 左闭右开区间:[0, delimiterIndex)

中序遍历左区间

        vector<int> leftInorder(inorder.begin(), inorder.begin() + delimiterIndex);

        // [delimiterIndex + 1, end)

中序遍历右区间

        vector<int> rightInorder(inorder.begin() + delimiterIndex + 1, inorder.end() );

 

        // postorder 舍弃末尾元素

        postorder.resize(postorder.size() - 1);

 

        // 切割后序数组

        // 依然左闭右开,注意这里使用了左中序数组大小作为切割点

        // [0, leftInorder.size)

后序遍历左区间

        vector<int> leftPostorder(postorder.begin(), postorder.begin() + leftInorder.size());

        // [leftInorder.size(), end)

后序遍历右区间

        vector<int> rightPostorder(postorder.begin() + leftInorder.size(), postorder.end());

 

        root->left = traversal(leftInorder, leftPostorder);

        root->right = traversal(rightInorder, rightPostorder);

        return root;

    }

public:

    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {

        if (inorder.size() == 0 || postorder.size() == 0) return NULL;

        return traversal(inorder, postorder);

    }

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[论文笔记] GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU

GAMMA: A Graph Pattern Mining Framework for Large Graphs on GPU GAMMA: 基于 GPU 的针对大型图的图模式挖掘框架 [Paper] [Code] ICDE’23 摘要 提出了一个基于 GPU 的核外(out-of-core) 图模式挖掘框架(Graph Pattern Mining, GPM) GAMMA, 充分利用主机内存来处理大型图…

〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

如何禁止孩子在电脑中浏览某些网页?

在使用电脑的过程中&#xff0c;我们会使用浏览器来查看网页。而在孩子使用电脑的过程中&#xff0c;有些网页并不适合孩子查看。因此&#xff0c;我们需要禁止孩子浏览不健康的网页。那么&#xff0c;该如何禁止孩子在电脑中浏览某些网页呢&#xff1f; 定时关机3000简介 定时…

LeetCode231. Power of Two

文章目录 一、题目二、题解 一、题目 Given an integer n, return true if it is a power of two. Otherwise, return false. An integer n is a power of two, if there exists an integer x such that n 2x. Example 1: Input: n 1 Output: true Explanation: 20 1 Ex…

QML 自定义进度条组件开发

一、效果预览 二、介绍&#xff1a; 自定义的QML 屏幕亮度拖动进度条组件CusProgressBar 可跟鼠标移动 更改进度条样式 三、代码 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Controls.Material 2.12/***author:Zwj*csdn:来份煎蛋吧*date:2023/12/16*…

c/c++中 qsort 与 bsearch 算法的使用

------------------------------------------------------------ author: hjjdebug date: 2023年 12月 13日 星期三 17:30:41 CST descriptor: qsort & bsearch 算法的使用 ------------------------------------------------------------ qsort 用来排序,bsearch用来搜索…

2k小权值和

package tgb.第二章;import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class okt2k小权值和 {static int N(int) (2e57); // static Map<Integer, Integer> S new HashMap<Integer, Integer>() ;stat…

复盘理解/实验报告梳理 数据结构PTA实验二

一、列车厢调度 感觉这道题的题干有点难以读懂&#xff0c;或是有些地方介绍的比较含蓄。 先设置两个字符串&#xff0c;来接收进道顺序与出道顺序&#xff0c;题目的内容和那个知道入栈顺序求出栈顺序比较像。 从头循环遍历&#xff0c;检查配对&#xff0c;不配对的就入栈&am…

如何禁止服务器自动休眠

如何禁止服务器自动休眠 有时候服务器自己休眠&#xff0c;导致系统web站点无法访问&#xff0c;下面是解决办法&#xff01; 禁止服务器自动进入休眠状态的具体方法可能会因使用的Linux发行版而有所不同。以下是一些通用的方法&#xff0c;你可以根据你的系统选择适用的&#…

python之画动态图 gif效果图

import pandas as pd import matplotlib import matplotlib.pyplot as plt import os# set up matplotlib is_ipython inline in matplotlib.get_backend() if is_ipython:from IPython import displayplt.ion()def find_csv_files(directory):csv_files [] # 用于存储找到的…

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…

python实现最小二叉堆---最小堆结构

#来源于MOOC学习以及数据结构与算法分析# 在我们学习最小二叉堆代码实现之前&#xff0c;我们需要去了解一下&#xff0c;什么是最小二叉堆&#xff08;也有最大二叉堆&#xff0c;也叫最大堆&#xff09;。 也就是说什么是二叉堆&#xff1f;&#xff1f;&#xff1f;&#…

HiveSql语法优化三 :join优化

前面提到过&#xff1a;Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff1b;每种join算法都有对应的优化方案。 Map Join 在优化阶段&#xff0c;如果能将Common Join优化为…

Excel中的INDIRECT函数用法

当在 Excel 中使用 INDIRECT 函数时&#xff0c;它可以帮助我们通过引用字符串中的单元格地址来获取对应单元格的值。这个函数非常有用&#xff0c;特别是在需要动态地引用其他单元格的情况下。下面是 INDIRECT 函数的一些用法和示例&#xff1a; 基本用法&#xff1a; INDIREC…

Linux 中的网站服务管理

目录 1.安装服务 2.启动服务 3.停止服务 4.重启服务 5.开机自启 6.案例 1.安装服务 网址服务程序 yum insatll httpd -y 查看所有服务 systemctl list-unit-files 2.启动服务 systemctl start httpd 查看服务进程&#xff0c;确认是否启动 ps -ef|grep httpd 3.停止…

python分析数据出现Text input context does not respond to _valueForTIProperty错误

一开始运行脚本还是不报错的&#xff0c;脚本内容部分如下&#xff1a; 出现了如下的效果图&#xff1a; 后面隔了几天再次运行居然报错了&#xff0c;如下图所示&#xff0c;但是也没有更改代码啊。后来发现原来是输入法导致的&#xff0c;把输入法切换成英文状态就不报错啦。…

【英/中,前端】Form <input> elements must have labels每一个元素应当都有一个标签

原文如下&#xff1a; Form elements must have labels | Axe Rules | Deque University | Deque Systems 编程式的关联标签和窗体控件。 下面以推荐程度从高到低依次排列&#xff0c;使用label元素->使用for和id属性显示关联&#xff0c;就这样。 label标签的包裹 or 不包…

linux下sys目录与proc目录的作用

sys目录作用 在Linux系统中&#xff0c;/sys目录是一个特殊的虚拟文件系统&#xff08;sysfs&#xff09;&#xff0c;用于提供对内核和设备的运行时信息的访问。它是在内核中运行的驱动程序和子系统的接口&#xff0c;可以用于获取和配置系统的硬件和内核信息。 以下是/sys目…

条件分布律

设是二维离散型随机变量&#xff0c;对于固定的&#xff0c;若&#xff0c;则称 &#xff0c; 其中 为在条件下随机变量的条件分布律。 对于固定的&#xff0c;若&#xff0c;则称 &#xff0c; 其中 为在条件下随机变量的条件分布律。

内网穿透工具,如何保障安全远程访问?

内网穿透工具是一种常见的技术手段&#xff0c;用于在没有公网IP的情况下将本地局域网服务映射至外网。这种工具的使用极大地方便了开发人员和网络管理员&#xff0c;使得他们能够快速建立起本地服务与外部网络之间的通信渠道。然而&#xff0c;在享受高效快捷的同时&#xff0…