二叉树的遍历

2021-10-29 atcoder ABC157——B - Bingo B - Bingo 先标记,然后暴力判断,这样最清晰最好想。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long LL; int a[110][110],b[110]; int main() { for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) cin>>a[i] 阅读详情

一 概述

树的遍历可分为两类:

1. 深度优先遍历(DFS-Depth First Search):深度优先遍历是对于每一个可能的分支路径深入到不能再深入为止,而且每一个节点只能访问一次,对于二叉树的深度遍历可以分为三种:

  • 先序遍历:先访问树的根,然后遍历左子树,最后遍历右子树。
  • 中序遍历:先遍历左子树,然后访问根,最后遍历右子树。
  • 后序遍历:先遍历左子树,然后遍历右子树,最后访问根。

2. 广度优先遍历(BFS-Breath First Search):广度优先遍历也可以称为层序遍历,从上往下对每一层一次访问,在每一层中,从左往右访问结点,访问完一层就进入下一层,直至所有结点均被访问。

二 基于Java语言实现树的结构的定义与树节点初始化

           

1. 树结构的定义

package main.BinaryTree;

import java.util.List;

public class TreeNode {

    String value;
    TreeNode left;
    TreeNode right;

    public TreeNode(String value) {

        this.value = value;
    }

    public TreeNode(String value, TreeNode left, TreeNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

2.树节点的初始化

static TreeNode createBinaryTree() {

        //定义节点
        TreeNode G = new TreeNode("G");
        TreeNode D = new TreeNode("D");
        TreeNode E = new TreeNode("E", G, null);
        TreeNode B = new TreeNode("B", D, E);
        TreeNode H = new TreeNode("H");
        TreeNode I = new TreeNode("I");
        TreeNode F = new TreeNode("F", H, I);
        TreeNode C = new TreeNode("C", null, F);

        // 构造根节点
        TreeNode root = new TreeNode("A", B, C);
        return root;
    }

三 基于深度优先遍历实例

1. 先序遍历

   //先序遍历,即先访问根节点,然后遍历左子树,最后遍历右子树
    public void preOrder(TreeNode treeNode) {
        if (null != treeNode) {

            System.out.print(treeNode.value);

            if (null != treeNode.left) {
                preOrder(treeNode.left);
            }

            if (null != treeNode.right) {
                preOrder(treeNode.right);
            }
        }
    }

先序遍历:ABDEGCFHI

2. 中序遍历

//中序遍历,即先遍历左子树,然后访问根节点,最后遍历右子树
    public void midOrder(TreeNode treeNode) {
        if (null != treeNode) {

            if(null != treeNode.left) {
                midOrder(treeNode.left);
            }

            System.out.print(treeNode.value);

            if(null != treeNode.right) {
                midOrder(treeNode.right);
            }
        }
    }

中序遍历:DBGEACHFI

3. 后序遍历

  //后序遍历,即先遍历左子树,然后遍历右子树,最后访问根节点
    public void postOrder(TreeNode treeNode) {

        if(null != treeNode) {

            if(null != treeNode.left){
                postOrder(treeNode.left);
            }

            if(null != treeNode.right){
                postOrder(treeNode.right);
            }

            System.out.print(treeNode.value);
        }
    }

后序遍历:DGEBHIFCA

四 基于广度优先遍历实例

层序遍历

public void breathOrder(TreeNode treeNode) {

        if (null != treeNode) {

            LinkedList<TreeNode> linkedList = new LinkedList<>();
            linkedList.add(treeNode);
            TreeNode currentNode;

            while (!linkedList.isEmpty()) {

                currentNode = linkedList.poll();
                System.out.print(currentNode.value);

                if (null != currentNode.left) {
                    linkedList.add(currentNode.left);
                }

                if (null != currentNode.right) {
                    linkedList.add(currentNode.right);
                }
            }
        }
    }

层序遍历:ABCDEFGHI

五 森林和树遍历顺序的对应关系

树二叉树森林
先根遍历先序遍历先根遍历
后根遍历中序遍历后根遍历

精雕软件(JDpaint) 5.5 绿色版 精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版 立即下载

相关推荐

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。&lt;view class='container'&gt; &lt;!-- 菜单 --&gt; &lt;view class='menu'&gt; &lt;ul&gt; &lt;!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

二叉树的遍历及深度的计算

我们上一篇已经介绍了大量的二叉树知识,这下我们介绍一下其他的知识,接下来我们会了解到二叉树非递归后序遍历的简单版本,还有层序遍历,以及后面的二叉树的深度查找递归,非递归两种版本。这些都会帮助我们在以后的问题中解决很多的事的,所以接下来就要慢慢思考,它里面把好的整体思想。二叉树的根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此下去。深度是指所有结点中最深的结点。

z3551906947的博客 3214

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1187

算法套路八——二叉树深度优先遍历(前、中、后序遍历)

前序遍历在某些数据下不需要递归到边界(base case)就能返回,而另外两种需要递归到至少一个边界,从这个角度上来说它是最快的。中序遍历很好地利用到了二叉搜索树的性质,使用到的变量最少。后序遍历的思想是最通用的,即自底向上计算子问题的过程。想要学好动态规划的话,请务必掌握这个思想。且由以上示例代码都可以看出,在代码书写时要定义内部匿名函数dfs,不然可能会由于LeetCode判断问题影响结果。

Pistachiout的学习博客 1918

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

别再踩坑了!CAPL脚本里局部变量和全局变量的那些“怪事”(附CANoe实测代码)

本文深度解析CAPL脚本中局部变量和全局变量的特殊机制,揭示其与通用编程语言的差异。通过实测代码展示静态局部变量的默认行为和全局变量的节点隔离特性,并提供高效避坑指南,帮助汽车网络测试工程师避免常见陷阱。

weixin_30225755的博客 294

【C++升级之路】第九篇:vector

vector的基本概念、vector的使用(构造,迭代器,空间增长,增删查改)、vector迭代器失效问题、vector重要接口的模拟实现、模拟实现中使用memcpy的拷贝问题、vector的动态二维数组

Captain_ldx的博客 1023

红日-VulnStack靶场-ATT&CK(二):从Weblogic漏洞到域控渗透实战

本文详细解析了红日安全团队VulnStack靶场中从Weblogic漏洞到域控渗透的完整攻击链。通过实战演示Weblogic反序列化漏洞利用、Cobalt Strike持久化控制、域内信息收集及PsExec横向移动等关键技术,复现了企业内网渗透的典型场景,并提供了防御建议。

tgb3456789的博客 936

Leetcode刷题总结(二)

1、序列化二叉树 思路:这里把一颗二叉树转换成一个序列,再将序列转换成树。那这里只有一个序列,不存在先+中确定唯一二叉树的情况,因此这里要借助层序的关系,从上到下将节点保存,并保存空节点。这里比较麻烦的是,对字符串的处理,因为要考虑“,”。可以将得到的字符串,先去掉“,”,那么此时留下的都是节点。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *

qq_43557445的博客 4123

R语言实战:从Raw Counts到TPM/FPKM的完整转换指南(含代码调试技巧)

本文详细介绍了在R语言环境中将RNA-seq原始计数(raw counts)转换为TPM/FPKM值的完整流程,包含代码实现和常见错误调试技巧。通过具体案例演示如何正确处理基因长度和测序深度因素,实现表达量标准化,为生物信息学分析提供可靠数据基础。特别适合需要进行转录组数据分析的研究人员和实验室技术人员参考。

weixin_28559803的博客 481

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 794

二叉树的深度遍历,广度遍历,前序,中序,后序遍历的的区别,以及递归实现,非递归实现

1.二叉树的前序遍历,中序遍历,后序遍历是深度遍历的一种特殊情况。 2.二叉树的实现,以及前序,中序,后续的递归实现,以及前序的非递归实现,文章地址: 3.深度优先遍历的非递归实现是用栈来实现的,文章地址: 4.广度优先遍历是用队列来实现的,文章地址: 5.以上文章都是我自己写的,如有不正之处,敬请指正! ...

qq_42528170的博客 511

一文读懂 SAP ERP / SAP S/4HANA 里的 Price List:概念、配置、定价流程与可运行 ABAP 示例

SAP ERP/S4HANA中的Price List解析 本文系统阐述了SAP定价体系中Price List的核心概念和实现机制。Price List并非独立的价目表,而是通过条件技术(条件类型、访问序列、条件记录)与Price List Type(PLTYP)共同作用的定价维度。文章详细说明了: Price List本质上是客户主数据中的PLTYP字段,作为定价查找键使用 定价流程中条件访问序列如何利用PLTYP查找特定价格 S4HANA与ECC版本在价格维护入口的差异 实际业务中如何通过不同PLTYP实

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

图解二叉树及二叉树遍历

二叉树及二叉树遍历 完全二叉树 二叉树的遍历 遍历的性质 1、完全二叉树 对于一棵具有n个节点的二叉树(按层序编号),如果编号为i的节点与同样深度的满二叉树中编号为i的节点在二叉树的位置完全相同,则为完全二叉树。 换句话来说,如果每个节点按照满二叉树的结构逐层顺序进行编号,如果编号出现编号空挡,就说明不是完全二叉树,否则就是。如下图所示:左边二叉树按照完全二叉树进行编号,出现了10号的空挡,右边

xiaotan2011929的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

详解二叉树的遍历

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;父节点被访问的次序位于左右孩子节点之间,就是中序遍历;访问完左右孩子节点之后再访问父节点,就是后序遍历。不论是先序遍历、中序遍历还是后序遍历,左右孩子节点的相对访问次序是不变的,总是先访问左孩子...

supermouse的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

二叉树的前序遍历(先序遍历)、中序遍历、后续遍历及两种遍历序列推导二叉树

二叉树的遍历: 前序遍历(先序遍历)、中序遍历、后续遍历 二叉树的遍历是指不重复地访问二叉树中所有结点,主要指非空二叉树,对于空二叉树则结束返回,二叉树的遍历主要包括前序遍历、中序遍历、后序遍历 给定了二叉树的任何一种遍历序列,都无法唯一确定相应的二叉树。但是如果知道了二叉树的中序遍历序列和任意的另一种遍历序列,就可以唯一地确定二叉树。 一、前序遍历(先序遍历):(根->左->右) 前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树; 顺序:访问根节点->前序遍历左子树->前

DayDayUp 9453

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

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

二叉树的遍历和线索二叉树

若二叉树为空,则空操作;否则(1)访问根结点(2)先序访问左子树(3)先序访问右子树//采用二叉链表存储结构,Visit是对数据元素操作的应用函数//先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit//最简单的Visit函数是:// status PrintElement(TElemType e){//输出元素e的值//使用时,加上格式串//调用实例:PreOderTranverse(T,PrintElement);if (T){

2401_87880211的博客 2385

二叉树及先序遍历二叉树,中序遍历二叉树,后序遍历二叉树

目录 定义结点数据类型 建立一颗带头结点的二叉树 遍历 访问函数 主代码 定义结点数据类型 typedef struct bitnode { char data; struct bitnode *Lchild,*Rchild; } BiTNode,*BiTree; 建立一颗带头结点的二叉树 BiTree CreatTree() { BiTree p...

小小前端攻城狮的博客 3554

二叉树遍历 和 线索二叉树

其实你获得这串顺序编号就是通过访问操作而来的假设访问操作是 visit(p) #p是指向被访问的节点“输出参数p所指向地址的节点的编号void visit(二叉树结构的指针类型 p)printf("%c",p->data) #我们在遍历中默认:二叉树结构中data存储的是二叉树的编号。通过上述代码你在用遍历过程中根据visit添加位置的不同就能确定二次树的访问顺序到这里你应该已经能明白大部分的问题了,我们开始通过代码对知识的巩固。

m0_63523451的博客 1915

遍历二叉树

二叉树遍历

weixin_52555350的博客 5931

二叉树的遍历以及遍历序列构建二叉树

文章目录二叉树的遍历NLR 前序遍历LNR 中序遍历LRN 后序遍历通过遍历序列构造二叉树中序 + 后序中序 + 前序 结点结构: typedef struct Node{ ElementType value; Node* left; Node* right; Node(ElementType value_, left_ = NULL, right_ = NULL) :value(va...

还是应该要努力的(12点前睡觉!!!!! 1048

二叉树遍历

二叉树:二叉树是每个节点最多有两个子树的树结构。   本文介绍二叉树的遍历相关知识。 我们学过的基本遍历方法,无非那么几个:前序,中序,后序,还有按层遍历等等。 设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。 首先我们定义一颗二叉树 typedef cha...

少说,多做。 8237

js实现二叉树遍历

js实现二叉树遍历二叉树遍历1、递归遍历(前、中、后)2、层序遍历3、重建二叉树参考文献 二叉树遍历 常用的二叉树的遍历方式:前序遍历、中序遍历、后序遍历、层序遍历 (1)前序遍历:左、右、根; (2)中序遍历:左、根、右; (3)后续遍历:左、右、根; (4)层序遍历:从上到下,同层节点从左到右。 1、递归遍历(前、中、后) //节点结构 /* function TreeNode(x) { ...

YongxiaWu的博客 6024

二叉树之遍历

二叉树常见遍历方法

my_air的博客 1170

二叉树的创建以及遍历

**二叉树的存储方式有两种,一种是以链表的方式进行存储,一种是以数组的方式进行存储*当以数组的方式进行存储的时候,要注意节点之间的关系,假设根节点的位置为POS那么左子树的位置就是*2*POS+1,右子树的位置就是2*POS+2。正是由于这层关系,当二叉树不是满二叉树的时候,使用数组进行存储*是非常的浪费空间的,空间的利用率较低。*当以链表的方式存储二叉树的时候,每一个二叉树节点都含有一个左孩子指针和一个右孩子指针,两个指针分别*指向相应的节点,节省空间,并且更容易使用。*/...

qq_51725723的博客 2740

一文了解二叉树的遍历和线索二叉树

了解二叉树的遍历和线索二叉树

weixin_73681410的博客 1040
上一篇: GraphQL入门
下一篇: 进程
至学者
博客等级 码龄9年 180粉丝 773原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值