【无标题】

如何遍历二叉树

(搬运自力扣)链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/9ab39g/

遍历二叉树是通过 队列来实现的,队列是先入先出,首先将根结点放入队列,当一个结点被弹出队列,移入结果矩阵后后, 就将其所有孩子依次放进队列。

对于二叉树,从根开始,每层进入的元素都是挨着的,每一层的孩子进入队列也是挨着的,不会出现下一层的元素比本层先进入队列,所以,通过队列首部访问元素并将其孩子从尾部放入,实现了将二叉树有序排列。

定义队列的方法

queue< TreeNode* > que; 定义队列,元素类型为TreeNode* , 队列名称为 que
队列的常用函数:
que.front() 队列的第一个元素;
que.pop() 弹出元素第一个元素;pop()没有返回值只是删除第一个元素
que.push_back() 在队列的后面添加元素;

步骤

1, 定义队列 que, 将 2压入队列, 开始while循环,如果队列不为空就一直循环
2, 定义vector 存放 打印的变量
3, while中的函数体
TreeNode* node = que.front();// 定义一个指针
que.pop();// 弹出第一元素
res.push_back(node->val); // 往res 中压入 node 指向的元素
if(node->left) que.push(node->left);// 如果这个指针有左叶子, 压入左叶子的指针
if(node->right) que.push(node->right);// 如果有右叶子的指针压入右边的指针

过程解析:

1, 将2的指针压入队列,队列不为空,能够进入while循环
2, while中,将2的指针弹出,将2写入res, 将2的左右孩子指针压入
res=[2] que=[*1, *3] 表示这两个元素对应的指针
3, que不为空,while循环成立,1的指针被弹出,1的左右孩子指针被压入,但是在
3后
res=[2, 1] que=[*3, *4, *5]
4, que不为空, while成立, *3被弹出,*3的左右孩子被压入,
res=[2,1,3], que=[*4, *5, *6, *7];
… 重复后 树的每个元素都能按照层,从左到右打印,
![
](https://img-blog.csdnimg.cn/1fa8b68c5efe4efab96571f5c15bac82.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IN0SGEo1-1691591636696)(https://imgblog.csdnimg.cn/01b39ae86d3d42e98b7dd40b0d4fbaa3.png)]
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值