class Solution {
public:
int kthLargest(TreeNode* root, int k) {
dfs(root);
sort(result.begin(),result.end());
reverse(result.begin(),result.end());
if(k>=result.size()) return result[result.size()-1];
return result[k-1];
}
private:
vector<int> result;
void dfs(TreeNode* root)
{
if(!root) return ;
result.push_back(root->val);
dfs(root->left);
dfs(root->right);
}
};
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
dfs(root,0);//从0开始计数
return depth;
}
private:
int depth=1;
void dfs(TreeNode* root,int dep)
{
if(!root)
{
depth=max(depth,dep);
return ;
}
dep++;
dfs(root->left,dep);//dfs前面会对每个进来的结点判空 空就return 所以这边不要判空
dfs(root->right,dep);
}
};
采用迭代 队列写写看
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;//不要忘记好吧求求你了
int depth=0;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size=q.size();
while(size--)
{
TreeNode* t=q.front();
q.pop();
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
depth++;
}
return depth;
}
};