给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
题解:
这里我们给出递归的方式遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void level(vector<vector<int>> &ve,TreeNode* root,int deep){
if(root==nullptr) {
return ;
}
//将deep深度节点添加进vector数组即可
ve[deep].push_back(root->val);
//因为是层序遍历,所以我们先遍历左子树,再遍历又子树
//deep+1 深度加一
level(ve,root->left,deep+1);
level(ve,root->right,deep+1);
}
//求二叉树深度
int f(TreeNode* root,int deep){
if(root==nullptr) return 0 ;
//返回左右子树深度的最大值
return max(f(root->left,deep+1),f(root->right,deep+1))+1;
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ve;
int n=0;
n = f(root,0);
//这里是对vector数组初始化的操作
for(int i=0;i<n;i++){
ve.push_back(vector<int>());
}
level(ve,root,0);
return ve;
}
};