具体思路:
删除也可以;
但是是真没想到这个直接按照深度保存即可;
具体代码:
1.删除:
/**
* 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:
vector<vector<int>> findLeaves(TreeNode* root) {
vector<vector<int>> ret;
while(1){
vector<int>vec;
bool flag=dfs(root,vec);
ret.push_back(vec);
if(flag)
break;
}
return ret;
}
bool dfs(TreeNode* root,vector<int>& vec){
if(!root)
return false;
if(!root->left&&!root->right){
vec.push_back(root->val);
return true;
}
int left=dfs(root->left,vec);
int right=dfs(root->right,vec);
if(left){
root->left=nullptr;
}
if(right){
root->right=nullptr;
}
return false;
}
};
2.自底向上算深度:
/**
* 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:
vector<vector<int>> findLeaves(TreeNode* root) {
vector<vector<int>> ret;
dfs(root,ret);
return ret;
}
int dfs(TreeNode* root,vector<vector<int>>& ret){
if(!root)
return -1;
int depth=max(dfs(root->left,ret),dfs(root->right,ret))+1;
if(ret.size()<depth+1)
ret.push_back({root->val});
else
ret[depth].push_back(root->val);
return depth;
}
};