题目
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路
该题我们采用前序遍历的思路
又因为题目要求每层的节点返回一个一维容器,所以我们不仅要遍历到每一个节点,还要将每一个节点标记层数,压入正确的一层容器内
为了解决这个问题,我们的递归函数除了当前节点的指针外,还要再定义一个整型参数,以存储当前节点的层数
为了方便,我们将根节点认为是第 0
层
/**
* 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<vector<int>> ans; //定义ans数组全局变量
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root) return ans; //空树就返回一个空数组
digit(root, 0); //从第0层的根节点开始递归
return ans; //返回答案
}
void digit(TreeNode* root, int deep) { //参数:当前节点指针、当前节点深度
if(!root) return ; //该节点为空则返回
if(deep >= ans.size()) ans.push_back(vector<int> {});
//如果是新的一层,就加入一个新的一维数组
ans[deep].push_back(root -> val); //加入该节点的值
digit(root -> left, deep + 1); //向左递归 深度+1
digit(root -> right, deep + 1); //向右递归 深度+1
}
};