class Solution {
public:
int getHeight(TreeNode* node)
{
if(node==nullptr) return 0;
int rightnode = getHeight(node->right);
int leftnode = getHeight(node->left);
int height = 1+max(leftnode,rightnode);
return height;
}
int maxDepth(TreeNode* root) {
int result = getHeight(root);
return result;
}
};
方法二:精简后续递归法
class Solution {
public:
int getHeight(TreeNode* node)
{
if(node==nullptr) return 0;
return 1+max(getHeight(node->left),getHeight(node->right));
}
int maxDepth(TreeNode* root) {
int result = getHeight(root);
return result;
}
};
方法三:前序递归法
class Solution {
public:
int result = 0; //全局变量记录深度最大值
void getDepth(TreeNode*node ,int depth){
result = result>depth?result:depth;
if(!node->left&&!node->right) return; //递归结束条件
if(node->left){
getDepth(node->left,depth+1);
}
if(node->right){
getDepth(node->right,depth+1);
}
}
int maxDepth(TreeNode* root) {
if(root==nullptr) return result;
getDepth(root,1);
return result;
}
};
class Solution {
public:
int maxDepth(Node* root) {
queue<Node*> que;
int result =0;
if(root!=nullptr) que.push(root);
while(!que.empty()){
int size = que.size();
while(size--)
{
Node* node = que.front();
que.pop();
for(auto node:node->children)
{
if(node)que.push(node);
}
}
result++;
}
return result;
}
};
方法二:前序递归
class Solution {
public:
int result = 0;
void getDepth(Node* node,int depth){
if(node==nullptr) return;
result = result>depth?result:depth;
for(auto childnode:node->children)
{
getDepth(childnode,depth+1);
}
}
int maxDepth(Node* root) {
if(root==nullptr) return result;
getDepth(root,1);
return result;
}
};
方法三:后续递归
class Solution {
public:
int getHeight(Node* node)
{
if(node==nullptr) return 0;
int depth = 0;
for (int i = 0; i < node->children.size(); i++) {
depth = max (depth, getHeight(node->children[i]));
}
return depth + 1;
}
int maxDepth(Node* root) {
int result = getHeight(root);
return result;
}
};