我写了 dfs 的方法,可以说是有点没忘,依照脑海中的写法写的,再记录一下加深一下印象
说到底其实就是这个公式:
左树右树中的最大值+1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL) return 0;
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
return max(left_depth, right_depth) + 1;
}
};
bfs (层序)
bfs 的关键点就是,层序一个时刻只可能有两层在遍历中
借助这个特性,用两个队列保存节点,上一层空了,就可以开下一层,也就可以 +1 了,试试看
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
int depth = 0;
queue<TreeNode*> q({root});
while(!q.empty()) {
queue<TreeNode*> tmp;
while(!q.empty()) {
auto node = q.front();
q.pop();
if(node == nullptr) continue;
tmp.push(node->left);
tmp.push(node->right);
}
q = tmp;
depth++;
}
return depth-1;
}
};
一次想要清空一层的话,不要按我那个复杂的逻辑,直接内循环清空一层就好了,逻辑清晰