二叉树遍历思路及代码(先序、中序、后序、层遍历)

本文介绍了二叉树的概念、形态和特点,并详细讲解了二叉树的先序、中序、后序递归遍历以及非递归遍历的思路和代码实现,包括层遍历的方法。
摘要由CSDN通过智能技术生成

目录

一、二叉树介绍

二、二叉树遍历

1.创建二叉树

2.递归

(1)先序遍历(根左右)

(2)中序遍历(左根右)

 (3)后序遍历(左右根)

3.非递归

(1)先序遍历

(2)中序遍历

(3)后序遍历 (左右根——根右左)

(4)层遍历


一、二叉树介绍

1.定义:二叉树是n个结点的有限集合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树构成。

2.形态:二叉树有5种形态,分别是空二叉树、只有一个根结点、根和左孩子、跟和右孩子、根和左右孩子。

3.分类:满二叉树、完全二叉树、不完全二叉树 (满二叉树是特殊的完全二叉树)

如何进行区分?对当前树进行编号从上到下从左到右依次编号,如果编号中间没有断开,而且最底层是全的,就是满二叉树;如果编号中间没有断开,最底层不是满的,是完全二叉树;如果中间编号断开,一定是不完全二叉树。

4.特点:

(1)每个结点最多有两棵子树(不是只有两棵),二叉树中不存在度大于2的结点。

(2)左子树和右子树次序不能颠倒,如同人的左右手。

(3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树,例如树1树2是同一棵树,但却是不同的二叉树。

二、二叉树遍历

本篇重点介绍先序遍历、中序遍历、后序遍历和层遍历的实现思路及代码。层遍历很好理解,顾名思义就是一层一层进行遍历,先、中、后序是按照根结点与左右孩子的遍历顺序来区别的。

先序遍历顺序就是先遍历根,然后是左孩子,最后遍历右孩子,简称根左右;中序遍历:左跟右;后序遍历:左右根。

1.创建二叉树

在遍历二叉树之前,我们需要先创建一颗二叉树,我们以下图二叉树为例来写代码:

在这棵二叉树中,我们可以发现根结点A的左右孩子又都分别是一棵树,所以在创建和遍历时都可以运用递归来写代码。在创建二叉树的过程中,我们假设“#”作为结束,把上面这棵二叉树补充完整可得下图:

 

 用先序遍历(根左右)的思想来创建这棵树,先遍历A,然后A的左孩子,再遍历A的右孩子,那么先序遍历顺序应该为ABDG##HI####CF##,得到一个字符串,我们创建根结点把A放进去,然后创建左孩子和右孩子。

代码示例:

#include<iostream>
using namespace std;
//一个结点需要三部分组成:自身的值,指向左孩子的指针、指向右孩子的指针
class Node
{
public:
	Node():m_left(NULL),m_right(NULL){}
	Node(char v) :m_value(v), m_l
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值