我们从两个方向讲解二叉树的前序遍历(递归+迭代)
一.递归
思想:
从根节点开始向其左孩子遍历每经过一个节点记录一下该节点的数值(只在第一次经过该节点时进行记录),当走到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);
}
具体运行过程:(如图)

二.迭代
思想:
首先我们要知道递归的过程就是一个入栈和出栈的过程,所以我们可以使用迭代来模仿这个入栈和出栈的过程从而实现二叉树的前序遍历,首先判断该二叉树是否为空是空直接返回,不是空则进行前序遍历,将根节点入栈,一直将栈首元素的数值记录然后再将其左孩子入栈,当某个时刻栈首元素为空时,进入循环先将该空的节点出栈,然后记录新的栈首元素后将其出栈,
本文介绍了二叉树的前序遍历,分别通过递归和迭代两种方法进行讲解。递归方法从根节点开始,记录每个节点值,遍历左孩子,然后遍历右孩子。迭代方法模拟递归的栈操作,通过入栈和出栈实现前序遍历。详细代码和运行过程以辅助理解。
最低0.47元/天 解锁文章
1526

被折叠的 条评论
为什么被折叠?



