题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(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) { } };
解题思路:
我们可以利用队列先进先出的特性,
用队列来存放二叉树节点,
然后每次遍历二叉树的一层节点,
每层遍历的时候用数组存起来,然后放进二维数组,
每层都用新的数组村节点值即可。
代码:
/** * 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) { //建一个队列 queue q; TreeNode* cur = root; int qsize = 0; //先把根节点入队 if(root) { q.push(root); qsize++; } vector> vv; //循环到不再有节点入队 while(!q.empty()) { //每次初始化新数组 vector v; //循环该层的节点数 while(qsize--) { //节点出队,节点值打印 TreeNode* front = q.front(); q.pop(); v.push_back(front->val); //左右孩子入队 if(front->left) { q.push(front->left); } if(front->right) { q.push(front->right); } } //该层的节点数 qsize = q.size(); vv.push_back(v); } return vv; } };
过啦!!!
题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(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) { } };
解题思路:
这道题其实是上一道题的一个变式练习,
整体框架和思路是一样的,
我们只需要根据题意,将双数层的数组反转再打印即可。
代码:
/** * 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) { //建一个队列 queue q; TreeNode* cur = root; int qsize = 0; int cnt = 0; //先把根节点入队 if(root) { q.push(root); qsize++; } vector> vv; //循环到不再有节点入队 while(!q.empty()) { //每次初始化新数组 vector v; //记录层数 cnt++; //循环该层的节点数 while(qsize--) { //节点出队,节点值打印 TreeNode* front = q.front(); q.pop(); v.push_back(front->val); //左右孩子入队 if(front->left) { q.push(front->left); } if(front->right) { q.push(front->right); } } //该层的节点数 qsize = q.size(); //层数为双数的时候反转一下数组就行 if(cnt % 2 == 0) { reverse(v.begin(), v.end()); } vv.push_back(v); } return vv; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。