【LeetCode】剑指 Offer(14)

简介: 【LeetCode】剑指 Offer(14)

题目:剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(Leetcode)

题目的接口:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector levelOrder(TreeNode* root) {
    }
};


解题思路:

这道题让我们遍历二叉数,然后打印,


题目要求返回的是一个数组,


一开始遍历二叉树我第一个想到的是递归,


但很明显递归在这道题不好用,


那就只能用迭代去做,


我们可以利用队列先进先出的特性来实现遍历:


根据题意,我们需要从上到下遍历二叉数,


1. 将二叉树自上而下每一个节点指针入队;


2. 循环出队,出队时push_back进vector;


3. 当队列为空时,证明打印完成了,返回打印数组即可。


代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector levelOrder(TreeNode* root) {
        //如果二叉树为空,返回空数组
        if(root == nullptr)
        {
            return {};
        }
        //建一个队列存放二叉树节点
        queue q;
        vector ans;
        //第一层的根节点
        q.push(root);
        //一直出队,直到队列为空
        while(!q.empty())
        {
            //记录队头
            TreeNode* cur = q.front();
            //将队头出队
            q.pop();
            //打印二叉树每一个节点的值
            ans.push_back(cur->val);
            //二叉数的每一层所有节点都push进队列
            if(cur->left != nullptr)
            {
                q.push(cur->left);
            }
            if(cur->right != nullptr)
            {
                q.push(cur->right);
            }
        }
        return ans;
    }
};


过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


如果喜欢本文的话,欢迎点赞和评论,写下你的见解。


如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。


之后我还会输出更多高质量内容,欢迎收看。


相关文章
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
80 6
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
78 4
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 49. 丑数
解决剑指 Offer 49题"丑数"的Python实现,通过动态规划的方法计算出第n个丑数。
64 2
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
58 1
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
59 1
|
7月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
387 1
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
75 5
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
49 4
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
43 4
|
7月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
66 4