在二叉树算法中,解决问题大多数都是借助递归和栈。
方法一:递归:二叉树的最大深度是左子树和右子树深度最大值+1(根),也就是深度优先。
int maxDepth(TreeNode* root) {
return root==NULL? 0 : max(maxDepth(root->left), maxDepth(root->right))+1;
}
方法二:广度优先:借助栈一层一层的访问,每访问一层,深度加一;具体一点就是,从根开始,访问根的左子树右子树,记录下第二层结点的数量,进栈,再循环访问第二层的左子树右子树进栈,每经过一个这样的循环,深度加一。
int maxDepth(TreeNode* root) {
int layer=0;
if(root==NULL) return 0;
queue<TreeNode*>p;
p.push(root);
while(!p.empty()){
int s=p.size();
while(s){
TreeNode* q=p.front();
p.pop();
if(q->left!=NULL) p.push(q->left);
if(q->right!=NULL) p.push(q->right);
s--;
}
layer=layer+1;
}
return layer;
}