二叉树的【层序遍历】【垂序遍历】具体思路,文中包含多种方法(附完整代码)


前言

本文将主要围绕以下问题进行讨论:

二叉树的层序遍历、垂序遍历。

层序遍历的两种方法 【迭代法】【递归法】

垂序遍历的两种方法 【递归排序】【哈希递归】

对于垂序遍历的方法多种多样,大家也可以多多尝试不同的思路。


一、如何理解二叉树的层序遍历?

从根节点开始,首先访问根节点,然后依次访问根节点的每一层的所有节点。从第一层开始,自上而下,从左至右依次访问每一层的节点。

题目链接: [点击跳转] Leetcode 102. 二叉树的层序遍历

请添加图片描述


二、二叉树层序遍历

1.方法一(迭代法)

进行广度优先搜索,所以选择借助先进先出的队列。

引用辅助队列,首先对传入节点进行判断,若不为空,压入队列中。
这时,进入循环(直至队列为空:所有节点全部遍历完成停止)

在if循环中遍历出同一层的所有节点,再指向两侧子节点。

如下代码可以实现层序遍历,并且已标注好每句的作用:

class Solution {
   
public:
    vector<vector<int>> tre;//用于存储最终的层序遍历结果,其中每个子向量代表一层的节点值。
    queue<TreeNode*> que;//用于辅助实现层序遍历,存储待处理的节点。
    vector<vector<int>> levelOrder(TreeNode* root) {
   
        if (root == nullptr) {
   
            return tre;
        }
        que.push(root);//如果根节点不为空,将根节点root放入队列que中
        while (!que.empty()) {
   //进入循环,只要队列不为空,就一直进行
            int size = que.size();//记录当前队列的大小size,这个大小代表了当前层的节点数量
            vector<int> level;//创建一个临时向量level,用于存储当前层的节点值
            for (int i = 0; i < size; i++) {
   
                TreeNode* node = que.front();//取出队首节点node
                que.pop();//并将其从队列中弹出
                level.push_back(node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值