(2022.02.23)二叉树总结篇(1)
⼆叉树题目的递归解法可以分两类思路,
第⼀类是遍历⼀遍⼆叉树得出答案
第⼆类是通过分解问题计算出答案
这两类思路分别对应着 回溯算法核心框架 和 动态规划核心框架。
⼆叉树的所有问题,就是让你在前中后序位置注入巧妙的代码逻辑,去达到自己的目的。
104、二叉树的最大深度问题
比较简单
//使用临时变量保存当前深度时不要维护节点退出后的深度,即不需要index--,因为每一层退出,临时变量销毁
class Solution {
private:
//树不存在的时候,最大深度为0
int maxDep = 0;
public:
int maxDepth(TreeNode* root) {
int index = 0;
traverse(root,index);
return maxDep;
}
void traverse(TreeNode* node,int index){
if(node == nullptr){
maxDep = max(maxDep,index);
return;
}
index++;
traverse(node->left,index);
traverse(node->right,index);
}
};
//使用全局变量保存当前深度时,需要维护推出的深度,因为全局变量使用了同一个,在退出当前节点时,需要index--,获得返回上一层节点的深度。
class Solution {
private:
int maxDep = 0;
int index = 0;
public:
int maxDepth(TreeNode* root) {
traverse(root);
return maxDep;
}
void traverse(TreeNode* node){
if(node == nullptr){
maxDep = max(maxDep,index);
return;
}
index++;
traverse(node->left);
traverse(node->right);
index--;
}
};