IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉树的构建和遍历 -> 正文阅读

[数据结构与算法]二叉树的构建和遍历

从节点之间位置关系的角度来看,二叉树的遍历分为4种

1.前序遍历
2.中序遍历
3.后序遍历
4.层序遍历
从更宏观的角度来看,二叉树的遍历归结为两大类。
1.深度优先遍历(前序遍历、中序遍历、后序遍历)。
2.广度优先遍历(层序遍历)。

前序遍历
二叉树的前序遍历,输出顺序是根节点、左子树、右子树。
遍历顺序如图:
在这里插入图片描述

1.首先输出的是根节点1。
2.由于根节点1存在左孩子,输出左孩子节点2。
3.由于根节点2也存在左孩子,输出左孩子节点4。
4.节点4既没有左孩子,也没有右孩子,那么回到节点2,输出节点2的右孩子节点5。
5.节点5既没有左孩子,也没有右孩子,那么回到节点1,输出节点1的右孩子节点3。
6.节点3没有左孩子,但是有右孩子,因此输出节点3的右孩子节点6。
8.遍历完成,代码如下:

public void tree3(TreeNode node) {//前
		if(node==null) {
			return;
		}
		tree1(node.left);
		tree1(node.right);
		System.out.println(node.data);
	}
	

中序遍历

二叉树的中序遍历,输出顺序是左子树、根节点、右子树。

遍历顺序如图:

在这里插入图片描述

1.首先访问根节点的左孩子,如果这个左孩子还拥有左孩子,则继续深入访问下去,一直找到不再有左孩子的节点,并输出该节点。显然,第一个没有左孩子的节点是节点4。

2.依照中序遍历的次序,接下来输出节点4的父节点2。

3.再输出节点2的右孩子节点5。

4.以节点2为根的左子树已经输出完毕,这时再输出整个二叉树的根节点1。

5.由于节点3没有左孩子,所以直接输出根节点1的右孩子节点3。

6.最后输出节点3的右孩子节点6。

遍历完成,代码如下:

public void tree1(TreeNode node) {//中
		if(node==null) {
			return;
		}
			tree1(node.left);
			System.out.println(node.data);
			tree1(node.right);		
	}

后序遍历

二叉树的后序遍历,输出顺序是左子树、右子树、根节点。

遍历顺序如图:

在这里插入图片描述

顺序就说了,看图就好

遍历完成,代码如下:

public void tree3(TreeNode node) {//前
		if(node==null) {
			return;
		}
		tree1(node.left);
		tree1(node.right);
		System.out.println(node.data);
	}

层序遍历

层序遍历,顾名思义,就是二叉树按照从根节点到叶子节点的层次关系,一层一层横向遍历各个节点。

在这里插入图片描述1.根节点1进入队列

在这里插入图片描述

2.节点1出队,输出节点1,并得到节点1的左孩子节点2、右孩子节点3。让节点2和节点3入队。

在这里插入图片描述

3.节点2出队,输出节点2,并得到节点2的左孩子节点4、右孩子节点5。让节点4和节点5入队。

在这里插入图片描述

4.节点3出队,输出节点3,并得到节点3的右孩子节点6。让节点6入队。

在这里插入图片描述

5.节点4出队,输出节点4,由于节点4没有孩子节点,所以没有新节点入队

在这里插入图片描述

6.节点5出队,输出节点5,由于节点5同样没有孩子节点,所以没有新节点入队。

在这里插入图片描述

7.节点6出队,输出节点6,节点6没有孩子节点,没有新节点入队。

在这里插入图片描述遍历完成,代码如下:

LinkedList<TreeNode> queue = new LinkedList<>();
		queue.add(root);
		while (!queue.isEmpty()) {
			TreeNode treeNode = queue.pop();
			System.out.println(treeNode.value);
			if (treeNode.lc != null) {
				queue.add(treeNode.lc);
			}
			if (treeNode.rc != null) {
				queue.add(treeNode.rc);
			}
		}


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:22:02  更:2022-01-03 16:24:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:36:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码