迭代方法:
层序遍历二叉树时记录下此时层数即可
class Solution {
public:
int maxDepth(TreeNode* root) {
int depth = 0;
queue<TreeNode*> w;
if (root)
w.push(root);
while (!w.empty()) {
int size = w.size();
for (int i = 0; i < size; i++) {
if (w.front()->left)
w.push(w.front()->left);
if (w.front()->right)
w.push(w.front()->right);
w.pop();
}
depth ++;
}
return depth;
}
};
递归法:
方法一:使用一个全局变量和一个局部变量,全局变量记录最大深度,局部变量表示递归到某一节点时此节点的深度
class Solution {
public:
int depth = 0;
int max(int a,int b)
{
return a > b ? a : b;
}
void search (TreeNode * root,int count)
{
if(root == nullptr)
return;
count ++;
depth = max( depth,count);
search(root->left,count);
search(root->right,count);
}
int maxDepth(TreeNode* root) {
search(root,depth);
return depth;
}
};
方法二:
如果根节点存在,那么根节点所代表的二叉树的最大深度为该根节点的左子树的最大深度和右子树的最大深度取最大值加一(加上根节点),每一个节点以此类推,递归的方法就出来了
class Solution {
public:
int max(int a, int b)
{return a > b ? a : b;}
int maxDepth(TreeNode* root) {
if(root == nullptr)
return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return max(leftDepth,rightDepth) + 1;
}
};