问题描述:
给定一个二叉树,返回其按层次遍历的节点值。(即逐层地,从左往右访问所有的节点)
问题分析:
对于这个问题,我们可以采用先序遍历方式(根-左-右)来进行求解。首先,定义一个返回结果res数组,然后再输入树,设定深度值,当深度比res.size()的值更大时,新建一个空数组,然后对子树左右两边进行递归,并且深度加一。
/**
* 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>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
pre(root,0,res); //采用先序遍历方式
return res;
}
void pre(TreeNode* root, int depth, vector<vector<int>> &res)
{
if(!root) return; //如果树空了,就返回
if(depth>=res.size()) //表明需要增加一层
{
res.push_back(vector<int>{});
}
res[depth].push_back(root->val);
pre(root->left,depth+1,res);
pre(root->right,depth+1,res);
}
};