二叉树的基本操作_二叉树的遍历
引入
前面讲到了二叉搜索树以及它的一些基本操作(插入,搜索,删除),可是我们要怎么知道这些操作已经被执行了呢?换句话说,怎样来描述二叉树的结构。这里我们又用到了遍历。
和图的遍历一样,我们也需要逐个访问每一个节点,但跟图不同的是,二叉树的遍历是从根节点开始的,而非任意节点。根据二叉树的结构我们知道,每棵二叉树都是由三部分组成的:根节点,左子树和右子树。而根节点的左右子树也是由这三部分组成,所以二叉树的遍历问题也是可以用分治来解决的,即遍历一颗二叉树 = 访问根节点 + 遍历根节点的左子树 + 遍历根节点的右子树。
因而我们写出下面的递归关系式:
其中
三种遍历法
根据左子树、右子树和根节点的遍历顺序,我们可以把遍历方式分为前序、中序和后序遍历。
前序遍历
前序遍历是先访问根节点,然后遍历左子树,最后遍历右子树。下面这张动图展示了前序遍历的整个过程。
代码实现:
def pre_order(T):print(T.value, end=' ')if T.left:pre_order(T.left)if T.right:pre_order(T.right)
中序遍历
中序遍历是先遍历左子树,然后访问根节点,最后遍历右子树。下面这张动图展示了中序遍历的整个过程。
代码实现:
def in_order(T):if T.left:in_order(T.left)print(T.value, end=' ')if T.right:in_order(T.right)
后序遍历
后序遍历是先遍历左子树,然后遍历右子树,最后访问根节点。下面这张动图展示了后序遍历的整个过程。
代码实现:
def post_order(T):if T.left:post_order(T.left)if T.right:post_order(T.right)print(T.value, end=' ')
因为遍历需要访问的节点数总是为
,所以无论是哪种遍历方式,其复杂度都为
。
→ 本节全部代码 ←
← 快速排序 | 算法与复杂度zhuanlan.zhihu.com
→ 最近点对与凸包问题(DC)| 算法与复杂度zhuanlan.zhihu.com
二叉树的基本操作_二叉树的遍历相关推荐
- java二叉树详解_二叉树详解
树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.本篇 ...
- 二叉树的基本操作(建立与遍历)
[问题描述] 以二叉链表的形式创建二叉树(不超过20个结点),并编写二叉树的遍历算法,实现二叉树的先序.中序及后序三种遍历. [输入形式] 输入二叉树的结点信息(以先序遍历方式建立二叉树). [输出形 ...
- java二叉树的实现_二叉树的实现(Java语言描述)
实现二叉树 并先序遍历之. package 二叉树的实现; public class BinaryTree { class Node { int value; // 该节点存储的值. Node lef ...
- 二叉树的直径_二叉树直径
二叉树的直径 Problem statement: 问题陈述: Given a Binary Tree, find diameter of it. The diameter of a tree is ...
- 二叉树祖先节点_二叉树的祖先
二叉树祖先节点 Problem statement: 问题陈述: Given a Binary Tree and a target key, write a function that prints ...
- java二叉树的序列化_二叉树的序列化和反序列化
import java.util.LinkedList; import java.util.Queue; /** * 序列化和反序列化二叉树 * 先序.后序 * (中序不能实现) * 按层 */ pu ...
- 二叉树的基本操作(c语言)
二叉树的基本操作 创建二叉树 二叉树的叶子节点 二叉树的节点总数 二叉树的高度 二叉树的基本遍历方法 创建二叉树 代码: // 创建二叉树,使用# void createBiTree(BiTree&a ...
- 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...
后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...
- 多叉树的前序遍历_二叉树的非递归遍历的思考
封面图来自wikipedia 1 简介 二叉树的深度优先遍历(前序遍历.中序遍历.后序遍历)是一个比较基本的操作.如果使用递归的做法,很容易写出相应的程序:而如果使用非递归的做法,虽然也能写出相应的代 ...
最新文章
- 什么是JAVA内容仓库(Java Content Repository)(3)
- 利用CSDN将图片自动存入AI Studio :pic2bml
- Ansible 入门案例
- JS遮罩插件 -- JqLoad
- 【BZOJ4262】Sum 单调栈+线段树
- TS 188字节流结构图
- oracle触发器无效且,oracle创建触发器成功但是插值失败
- 4星|《疯狂的独角兽》:离职员工披露上市公司负面资料,以为是小说,搜索后发现是真事。...
- 简单读取winfrom资源文件
- Matlab二元函数图像绘制
- 计算机网络中的猫,猫(调制解调器)和路由器有什么区别和功能?
- 手写文字怎么识别,手写文字识别的方法
- 用python3根据配置自动生成自定义图片logo(一键解决图片侵权困扰)
- executeUpdate()和execute()的区别
- NTP DDoS反射放大攻击实验
- DownloadString”时发生异常:“基础连接已经关闭: 发送时发生错误
- 「网络流 24 题」太空飞行计划
- 三十一、Fluent空化模型
- linux tail 命令详解,Linux下如何使用tail命令指南
- Ehcache3 入门
热门文章
- 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用
- fastdfs笔记_fastDFS 命令笔记-阿里云开发者社区
- 明日之后怎么跳过实名认证_明日之后新手教程能不能跳过 明日之后新手教程玩法介绍...
- python穷举法搬砖_python 穷举法 算24点(史上最简短代码)-阿里云开发者社区
- ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
- axios delete有请求体吗_关于axios请求——delete方法
- Python面向对象中:__init__() 构造方法
- 【Python学习教程】:装饰器的详细教程,通俗易懂
- python教程:super()的用法
- matlab输入数组出曲线,用鼠标画出曲线,并将曲线所经过的点保存到数组中