二叉树的前序遍历(C语言)

本文介绍了二叉树的前序遍历,分别通过递归和迭代两种方法进行讲解。递归方法从根节点开始,记录每个节点值,遍历左孩子,然后遍历右孩子。迭代方法模拟递归的栈操作,通过入栈和出栈实现前序遍历。详细代码和运行过程以辅助理解。
摘要由CSDN通过智能技术生成

我们从两个方向讲解二叉树的前序遍历(递归+迭代)

一.递归

思想:

从根节点开始向其左孩子遍历每经过一个节点记录一下该节点的数值(只在第一次经过该节点时进行记录),当走到NULL时返回上一个节点,然后遍历其右孩子,如果右孩子存在记录其数值,再重复上面操作,如果不存在为NULL直接返回上一个节点再重复上面的操作.

代码如下:

void BTreePrevOrder(struct TreeNode* root,int* a,int* returnSize){//前序遍历
    if(NULL==root){//判出条件
        return;
    }
    a[(*returnSize)++]=root->val;
    BTreePrevOrder(root->left,a,returnSize);
    BTreePrevOrder(root->right,a,returnSize);
}

具体运行过程:(如图)

二.迭代

思想:

首先我们要知道递归的过程就是一个入栈和出栈的过程,所以我们可以使用迭代来模仿这个入栈和出栈的过程从而实现二叉树的前序遍历,首先判断该二叉树是否为空是空直接返回,不是空则进行前序遍历,将根节点入栈,一直将栈首元素的数值记录然后再将其左孩子入栈,当某个时刻栈首元素为空时,进入循环先将该空的节点出栈,然后记录新的栈首元素后将其出栈,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆陆陆ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值