Leecode 104
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。
方法一:
深度优先法,通过深度优先搜寻。从根节点开始,返回左侧和右侧的深度,然后返回最大值,由此递归,直到到达叶子。从叶子节点到根节点深度回溯,直到到达根节点。
代码:
int Leecode104_maxDepth(TreeNode* root) {
if (root == NULL) return 0;
int depth_L = Leecode104_maxDepth(root->left);
int depth_R = Leecode104_maxDepth(root->right);
return (depth_L > depth_R ? depth_L : depth_R) + 1;
}
或者
int maxDepth(TreeNode* root) {
if (root == NULL) return 0;
return std::max(maxDepth(root->left), maxDepth(root->right))+1;
}
或者
int maxDepth(TreeNode* root) {
return root == NULL? 0:std::max(maxDepth(root->left), maxDepth(root->right))+1;
}
方法二:
广度优先法
代码:
int Leecode104_3_maxDepth(TreeNode* root) {
std::queue<TreeNode*> q;
int ans = 0;
if (root != nullptr) q.push(root);
while (!q.empty()) {
for (int i = q.size() - 1; i >= 0; --i) {
TreeNode* cur = q.front();
q.pop();
if (cur->left) q.push(cur->left);
if (cur->right) q.push(cur->right);
}
++ans;
}
return ans;
}