class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr) return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
左为空,则返回右 + 1;右为空,则返回左 + 1;都不空才返回 min(left, right) + 1
class Solution {
public:
int minDepth(TreeNode* root) {
if (root == nullptr) return 0;
if (root->left == nullptr) return minDepth(root->right) + 1;
else if (root->right == nullptr) return minDepth(root->left) + 1;
return min(minDepth(root->left), minDepth(root->right)) + 1;
}
};
利用完全二叉树的特性
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
l_depth = 0
r_depth = 0
left = root.left
right = root.right
while left:
l_depth += 1
left = left.left
while right:
r_depth += 1
right = right.right
if l_depth == r_depth:
return 2 ** (l_depth + 1) - 1
return self.countNodes(root.left) + self.countNodes(root.right) + 1