使用递归方法,声明一个全局二维数组来保存遍历结果,以根结点为第0层,每次递归都使层数++,并在对应层数插入结点值。
由于结果集最初为空,需要随着层数的加深不断向其中加入新数组。由于使用层数进行插入,所以只需让层数与size进行比较,两者相等则说明层数越界,要想结果集中加入新数组。
这里有个小坑,算是基础不牢。最开始写的递归函数设了三个参数,有两个是现在的层数level和二叉树结点指针p,还有一个参数是结果集二维数组,发现结果不正确。调试查找原因是因为直接将结果集作为递归参数使用传值方式传入,出错。应将结果集的引用传入,或简单粗暴,直接将结果集写死写入函数中。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int>> v;
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
if(root == NULL){
return v;
}
go(0,root);
return v;
}
void go(int level, TreeNode* p){
if(v.size() == level){
vector<int> blank;
v.push_back(blank);
}
v.at(level).push_back(p->val);
if(p->left != NULL){
go(level+1, p->left);
}
if(p->right != NULL){
go(level+1,p->right);
}
}
};