二叉树前、中、后序,广度遍历bfs、深度遍历dfs(递归+非递归)

本文介绍了二叉树的前序、中序、后序遍历的递归和非递归实现,包括利用栈进行非递归遍历的方法。此外,还探讨了二叉树的深度优先遍历(DFS)和广度优先遍历(BFS)的区别,并讲解了stack、deque和queue在遍历中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:

二叉树的建立采用的是递归的思想:给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树。就像是在地上挖了个坑(根节点),然后他会拿着铲子(create函数)按照一定的规则自动挖一个很大的洞穴(二叉树)出来。当然挖坑前需要先定义每个洞长什么样(定义节点结构)。

递归就是有去(递去)有回(归来)。规模大转化为规模小是核心思想。

struct Tree{
    Tree* Left;
    Tree* Right;
    int data;
} ;
Tree* T;

遍历二叉树

心得:

0、已知前序和中序排列或已知后序和中序排列,可以唯一确定二叉树,但已知前序和后序无法确定唯一的二叉树。

1、先找第一层根节点,左右两大块。

2、前序和后序:分出左根右三大块后,每块最靠近根的两节点为根节点下面一层的两个节点。

      例:前序:A(BCD)(EF)       后序:(CDB)(FE)A

3、中序:第一个输出为最左边最下一层,中序先沿着左半边逐渐向右扩散

4、前序是根左右,所以越靠近主根节点的排列时会在上一层

所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次

二叉树的遍历采用的也是递归的思想:如果节点有数据,则按照遍历规则打印根节点和孩子节点,没有数据则返回直到所有数据都遍历完,递归结束。

由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。


递归实现

常见的遍历次序:(1)先序遍历;(2)中序遍历;(3)后序遍历。

(1)前序遍历(根--左--右)


void preOrderTraverse(Node* root)

{
    if( root!=NULL )
    {
        cout<<root->data<<' ';//或者是visit(root)
        preOrderTraverse(root->Left);
        preOrderTraverse(root->Right);
    }
else 
return;
}

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

void inOrderTraverse(Node* root)
{
    if( root!=NULL )
    {
        inOrderTraverse(root->Left);
        cout<<root->data<<' ';
        inOrderTraverse(root-&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值