算法day40 二叉树的最大深度
题目描述

解法1:递归
我们可以采用递归的方式求解这道题,由于要求解最大深度,我们的策略应该是让由根节点出发的后序遍历(这样的话可以避免对于根节点的二次访问),随后当递归到结尾时返回每一小层次的左右侧深度的比较,通过不断地叠加最后得到最大深度。具体的代码如下。
int maxDepth(TreeNode* root) {
if(root == nullptr) return 0;
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
return max(left_depth,right_depth)+1;
}
时间复杂度:O(n)
空间复杂度:O(h)
解法2:层序遍历
本题除了采用递归之外我们还可以采用层序遍历的方式,既然要求解最大深度,那么也即是要求最大的层数,那么我们可以借助队列,让每一层的节点全部入队,每当有节点出队时检查其是否有孩子,有孩子使其孩子入队,统计出每一层的节点个数,循环节点个数次,每一个这样的循环结束,便存在一层深度,累加后得到最大深度。代码如下。
public:
int maxDepth(TreeNode* root) {
int depth = 0;
if(!root) return depth;
queue<TreeNode*> que;
que.push(root);
//depth++;
while(!que.empty()){
int size = que.size();
while(size--){
TreeNode *Node = que.front();
que.pop();
if(Node->left){
que.push(Node->left);
}
if(Node->right){
que.push(Node->right);
}
if(Node->left || Node->right){
}
}
depth++;
}
return depth;
}
时间复杂度:O(n)
空间复杂度:O(n)
END
浙公网安备 33010602011771号