目录
一、题目描述
二、初次解答
三、官方解法
四、总结
一、题目描述
二、初次解答
1. 思路:二叉树的先序遍历。首先判断根节点是否是空,其次判断根节点是否是叶子节点,再者递归获取左子树的深度、右子树的深度,最后返回左子树、右子树的最大深度。此题与【LeetCode算法】第111题:二叉树的最小深度-CSDN博客类似。
2. 代码:
int maxDepth(struct TreeNode* root) { //根节点为空 if(!root) return 0; //根节点为叶子节点 if(!(root->left) && !(root->right)) return 1; int leftDepth=maxDepth(root->left); //递归左子树 int rightDepth=maxDepth(root->right); //递归右子树 return leftDepth>rightDepth?leftDepth+1:rightDepth+1; //返回左子树和右子树高度最大值 }
3. 优点:仅遍历一遍,时间复杂度为O(n)。
4. 缺点:采用递归算法,空间复杂度为O(H), H是二叉树的高度。
三、官方解法
与【LeetCode算法】第111题:二叉树的最小深度-CSDN博客类似,有广度优先和深度优先(与上述解法一致)算法。
四、总结
计算二叉树的最大深度和最小深度,都可以通过二叉树的先序遍历。只不过最小深度需要额外考虑左子树为空和右子树为空这两个情况。