题目
/**
* 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>> vec;
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
level_tree(root,0);
return vec;
}
void level_tree(TreeNode *root,int level){
if(root == NULL) return;
if(vec.size() == level) vec.resize(level + 1);
vec[level].push_back(root->val);
if(level % 2 == 0){
level_tree(root->right,level + 1);
level_tree(root->left,level + 1);
}else{
level_tree(root->left,level + 1);
level_tree(root->right,level + 1);
}
}
};
样例:
[1,2,3,4,null,null,5]
输出:[[1],[3,2],[5,4]]
预期:[[1],[3,2],[4,5]]
原因:在递归4,5节点所在层时,会先调用3的左子树(无),然后再调右子树5,最后才调2的子树。正确做法应该先调用2的子树,再调5的子树
正确代码
/**
* 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>> vec;
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
level_tree(root,0);
return vec;
}
void level_tree(TreeNode *root,int level){
if(root == NULL) return;
if(vec.size() == level) vec.resize(level + 1);
if(level % 2 == 0){
vec[level].push_back(root->val);
}else{
vec[level].insert(vec[level].begin(),root->val);
}
level_tree(root->left,level + 1);
level_tree(root->right,level + 1);
}
};
/**
* 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:
int maxDepth(TreeNode* root) {
if(root == NULL) return 0;
int a = maxDepth(root->left) + 1;
int b = maxDepth(root->right) + 1;
return max(a,b);
}
};
/**
* 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>> vec;
vector<vector<int>> levelOrderBottom(TreeNode* root) {
level_older(root,0);
reverse(vec.begin(),vec.end());
return vec;
}
void level_older(TreeNode * root, int depth){
if(root == NULL) return;
if(vec.size() == depth) vec.resize(depth + 1);
vec[depth].push_back(root->val);
level_older(root->left,depth + 1);
level_older(root->right, depth + 1);
}
};