問題描述
給定一個二叉樹 root ,返回其最大深度。
二叉樹的最大深度是指從根節點到最遠葉子節點的最長路徑上的節點數。
可以使用dfs和bfs兩種方法針對樹的層數進行遍歷,並記錄。
遞迴方法
可以用遞迴解決,比較簡單,用遞迴函式的返回值承載答案,x表示從當前層到最深層的深度。
class Solution {
public:
int solve(TreeNode* root) {
int x = 0;
if (root == nullptr) {
return x;
}
x++;
int l_deep = solve(root->left)+x;
int r_deep = solve(root->right)+x;
return max(l_deep, r_deep);
}
int maxDepth(TreeNode* root) {
int res = solve(root);
return res;
}
};
bfs方法
重點是使用佇列時,要判斷到哪個結點是樹一個層的結束,從而使得層數+1。
可以根據佇列中結點數量,使用for迴圈控制。
class Solution {
public:
int maxDepth(TreeNode* root) {
int res = 0;
queue<TreeNode*> q;
if (root != nullptr) {
q.push(root);
}
while(!q.empty()) {
int layer_size = q.size();
res++;
for (int i = 0; i < layer_size; i++) {
TreeNode* t = q.front();
q.pop();
if (t->left != nullptr) {q.push(t->left);}
if (t->right != nullptr) {q.push(t->right);}
}
}
return res;
}
};