二叉树的中序遍历

利用先序遍历创建二叉树,并给出相应二叉树的中序遍历结果。 // // binary_tree.cpp // BinaryTreeApp // // Created by ljpc on 2018/5/3. // Copyright © 2018年 ljpc. All rights reserved. // #include "binary_tree.h" BiTreeNode* CreatBiTree(char* s, int &i, int len) // 利用先序遍历创建二叉树 // 参数:先序遍历字符串s,字符串初始下标i=0,字符串. 阅读详情

写算法的前提是的搞清楚这个算法的思路到底是啥,比如这个,这个二叉树的中序遍历,自己都没搞清楚到底是怎么遍历的,就开始写代码,这样是徒劳的,搞清楚该题的问题,需求,然后想出思路,再开始写题

还有递归,虽然说一步步来不可取,但是,可以把数据尽量减少,然后一步步来看是否合适,或者调试。

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: llb
 * @Date: 2020/10/19 10:42
 */
public class InorderTraversal {
    int val;
    InorderTraversal left;
    InorderTraversal right;
    InorderTraversal() {}
    InorderTraversal(int val) { this.val = val; }
    InorderTraversal(int val, InorderTraversal left, InorderTraversal right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
    public static void main(String[] args) {

        InorderTraversal root = new InorderTraversal(1);
        InorderTraversal root2 = new InorderTraversal(2);
        InorderTraversal root3 = new InorderTraversal(3);
        root.right = root2;
        root2.left = root3;

        List<Integer> list = inOrderTraversal(root);
        System.out.println(list);
    }
    
    public static List<Integer> inOrderTraversal (InorderTraversal root) {
        List<Integer> res = new ArrayList<>();
        inorder(root, res);
        return res;
    }

    public static void inorder (InorderTraversal node, List<Integer> res) {
        if (null == node) {
            return ;
        }
        // 这里是相当于将该节点的子树全部,按照中序遍历之后,再将该节点的id放入集合,做到了,先左子树再根节点,然后再又子树
        // 如果左子树为空,那么就是将根节点添加结果集,然后再遍历该节点的右子树

        // 中序遍历:整体的思路就是,先左,再根,再右
        inorder(node.left, res);
        res.add(node.val);
        inorder(node.right, res);
    }
}

时间复杂度:O(N),N为二叉树的节点数,在遍历中,每个节点都被使用且只使用了一次。
空间复杂度:O(n)O(n)。空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n)O(n) 的级别。

(C语言)通过对二叉树的先序和中序遍历构建该二叉树,然后输出该二叉树的层序遍历结果 题目描述    深度遍历一棵二叉树有先序,中序和后序三种方式,并且根据遍历序列能确定一棵二叉树,要唯一确定一棵二叉树至少需要两种遍历序列 先序+中序 或 后序+中序,(先序+后序无法唯一确定) 现在给定你一棵二叉树的先序和中序序列,请你构造出这棵二叉树,并且输出其层序遍历结果 输入 输入包含多组测试数据 对每组测试数据: 第一行为一个正整数n(0 第二行为这棵树的先序遍 阅读详情

相关推荐

先序遍历线索二叉树

前面已经和大家介绍过"给线索二叉树加先序线索"的操作,这里我们再来讨论先序遍历线索二叉树的操作. 我们先来讨论该如何找到二叉树T中某结点的先序后继:根据先序遍历"根左右"的遍历顺序,如果该结点有左孩子,那么该结点的先序后继就是该结点的左孩子;如果该结点无左孩子且有右孩子,那么该结点的先序后继就是该结点的右孩子;如果该结点既无左孩子又无右孩子,那么该结点的先序后继为...

weixin_42048463的博客 4607

二叉树中序遍历

原文地址: 二叉树中序遍历 引入 定义 首先我们先看看什么是二叉树的中序遍历? 二叉树的中序遍历即见名知意,对于每个节点,先遍历左叶子节点,再遍历当前节点,最后遍历右叶子节点 举例说明 如图所求: 套用上述定义我们轻易到得这棵二叉树的中序遍历结果为:6、4、8、7、9、2、5、1、10、3 解释: 我们先来到根节点1,按照定义,先遍历左叶子节点 此时我们来到节点2,按照定义,先遍历左叶子节点 我们再来到节点4,按照定义,先遍历左叶子节点 我们再来到节点6,按照定义,先遍历左叶子节点,由于该节点的左叶子

Lengwenin的博客 1万+

中序遍历,层次遍历构建二叉树

题目链接:点击打开链接 问题 C: 还原二叉树时间限制: 1 Sec内存限制: 128 MB提交: 324解决: 155提交状态题目描述给一棵二叉树的层序遍历序列和中序遍历序列,求这棵二叉树的先序遍历序列和后序遍历序列。输入每个输入文件中一组数据。第一行一个正整数N(1输出输出两行,每行N个正整数,分别代表二叉树的先序遍历序列和后序遍历序列。每行末尾不输出额外的空格。样例输入73 5 4 2 6

江湖小虾米的博客 6066

二叉树中序遍历的三种方法

二叉树是一种重要的数据结构,对于二叉树的遍历也很重要。这里通过三种方法简单介绍一下二叉树的中序遍历。中序遍历就是先遍历二叉树的左子树,然后遍历根节点,最后遍历右子树。例如下面的二叉树,中序遍历的结果如下:[5,10,6,15,2]对于中序遍历,直观上的结果就是将二叉树所有节点投影到下面的一条直线上,得到的顺序就是二叉树的中序遍历结果。1、递归法递归方法是最容易想到的方法。递归调用遍历方法先遍历左子

Valineliu 12万+

二叉树由中序遍历序列加层序遍历序列构建二叉树

思路:由二叉树的层序遍历的第一个元素seq[0],我们可以知道它是根节点,所以我们在中序遍历中vector<int>inorder查找层序遍历序列的第一个位置 ,可以将中序遍历序列分成左右子树。然后我们构建左右子树的层序遍历序列。如下代vector<int>left; vector<int>right;左右子树的层次遍历。 #include<ios...

夏洛克福尔摩斯 1402

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1059

二叉树遍历方法——前、中、后序遍历(图解)

二叉树的前、中、后序遍历的递归与非递归算法

在夜里行走的博客 17万+

maya权重拷贝一对一,一对多

是不是有时候盔甲很多很碎头很大,用代理一个个拷贝很麻烦吧 用下面代码直接运行进行一对多或者一对一拷贝 第一个先选择参考物体,加选其他一堆有的没的有权重或没权重的物体执行一键拷贝,就可以啦 以下是源码送上,带走吧 ------------------------ #! -*- coding:utf -8 -*- #author:liubingdong #date:20...

weixin_30852367的博客 1531

二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的

My_Jobs的专栏 46万+

postgresql 数据库 timescaledb 函数time_bucket_gapfill()报错解决及更换 license

最近在工作中使用postgresql 和 timescaledb 的time_bucket_gapfill()函数 报错,让更换license,在网上找了一大圈,没有找到,最后解决了这个问题,这篇文章记录我的解决办法查看timescaledb.license参数命令:show timescaledb.license;修改命令: 结果不行,报错如下:lter system set timescaledb.license=‘timescale’;那只能换包了如果出现上面那种情况,那我们只能先从官网上下载带 '

yang_z_1的博客 3249

基于Qwen3-14B大模型的智能UI自动化测试实践

UI自动化测试是软件工程中保障产品质量的关键环节,其核心原理是通过脚本模拟用户操作,对软件界面进行功能验证。传统方法依赖于编写和维护基于元素定位的固定规则脚本,在面对复杂交互或频繁变化的界面时,维护成本高昂。大语言模型(LLM)的出现为这一领域带来了新的技术价值,其强大的自然语言理解和代码生成能力,使得测试脚本的编写从精确编码转向了任务描述。通过将大模型作为决策大脑,结合Playwright等自动化工具作为执行器,可以构建出能够理解界面、规划操作并验证结果的智能测试系统。这种方案特别适用于处理变化频繁、逻辑

weixin_42619742的博客 301

二叉树层序遍历

二叉树的层序遍历,带详细图解。【LeetCode】判断一颗树是否为完全二叉树

努力进大厂的小码娄 7033

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

线索二叉树的中序遍历

#include #include using namespace std; typedef enum{Link,Thread}PointTag; //Link==0:指针,Thread==1:线索 template class BiTrNode{ template friend class BiTrTree; private: T data; BiTrNode *lchild,*rchi

慢慢的专栏 3173

IP路由原理、静态路由及动态路由区分

什么是路由 路由是指导IP报文发送的路径信息。 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 静态路由是由管理员手工配置而生成的路由。 动态路由路由器使用路由协议从其他路由器那里获悉的路由。

weixin_42227328的博客 5468

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

二叉树双序遍历

所谓二叉树的双序遍历就是,对于二叉树的每个节点来说,先访问该节点,再按照这种方式访问左子树,再访问该节点,再按照双序遍历访问右子树。 该方法其实是对前序遍历进行了改变,多增加了一次访问节点函数的调用。 代码如下: #include <iostream> using namespace std; typedef struct BTNode { char data; BTNode *l_child; BTNode *r_child; } BTNode; void Dou

qq_42169456的博客 4050

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

通过先序遍历和中序遍历建立二叉树

在对二叉树进行操作之前,建树是必须要做的。假设现在有某二叉树的先序遍历和中序遍历,我们应该如何建树? 基本思路: 分别求得根节点的左子树和右子树的先序遍历序列与中序遍历序列 分别以左子树和右子树为新树进行第一步操作 直至没有子树为止 那么我们这么实现呢? 根据我们对二叉树遍历的学习,可以知道: 先序遍历序列中的第一个节点为根节点 一个节点的左右子节点分别位于中序遍历序列中该节点的两侧 举个例子: 对于图中二叉树,其先序遍历序列与中序遍历序列如右侧所示,每个序列共6个字母(此二叉树共有6个节点)。

MingYI 7374

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

先序遍历中序遍历还原二叉树

前言:这算是在刷树题的第一篇blog,记录一下,方便以后复习 准备 先序遍历二叉树结果的第一个节点是根节点 中序遍历二叉树结果中左子树右子树又以根节点隔开 假定: 先序遍历结果为: A B D F G H I E C 中序遍历结果为: F D H G I B E A C 第一次考虑 毫无疑问通过先序遍历可以知道A是最开始的根节点,所以中序遍历中我们可以知道它的结构是这样的 再进一步对上图中...

阳光大男孩!!!的博客 6790

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于根据先序遍历和中序遍历画二叉树的方法

一些新同学在画二叉树时往往会摸不着头脑不知道怎么画,接下来给你们提供我自己研究出来的两种定理: ①ZYT_先序遍历定理_前字母必比后字母平级或更高(能判断左右则不为同级) ②ZYT_中序遍历定理_前字母必在后字母左边 如设一棵二叉树的先序序列:ABDFCEGH,中序序列BFDAGEHC,请画出这棵二叉树。 由先序遍历头字母可知根节点为A, 由中序遍历根节点A可得在左子树子孙(BFD),右子树子孙(GEHC),即 根据: ZYT_先序遍历定理_前字母必比后字母平级或更高(能判断左右则不为同.

weixin_45528773的博客 7326

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

中序遍历二叉树

package cm.com.algorithm.tree; /** * 中序遍历2叉树 * 中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树 * * @author liushuai13@meicai.cn * @date 2019-06-11 22:14 */ public class LDRTree { private s...

Memorys 4736

二叉树的先序遍历

Description 给定一组输入数据,要求按照该输入数据构造一棵二叉树并且使用非递归的先序遍历算法遍历该二叉树。PS:不能使用递归先序遍历算法,必须是非递归。 Input 按照满二叉树的对应位置(即将输入的元素层序按从根到叶节点,同层按从左到右输入)输入一串数据,数据类型可为整形或字符形式,例如:1 2 3 # 5 6 # # # 10 # # 13,以空格分开,其中#号代表对应的节点处为空,...

沃沃头同学的博客 2334

C++算法二叉树中序遍历

非递归中序遍历二叉树思路(借助栈实现): 1、依次将所有左子节点压栈,直至为空; 2、弹出栈顶元素,访问栈顶,将栈顶的右子节点压栈,返回步骤1; 3、直至栈空。 (**递归的本质也是通过函数栈来实现代码的简化,故二叉树的递归遍历思路一样。一般的,递归算法大部分可以通过栈或者循环实现非递归化 **) 一、定义二叉树结构体 #include "stdafx.h" #include "iostream" #include <stack> #include <algorithm> using

yang4344的博客 4524
上一篇: 时间复杂度与空间复杂度
下一篇: 并发编程之一:线程与并发基础概念
java_xxxx
博客等级 码龄9年 127粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值