题目:剑指 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; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。