每日一题 0223

(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--;
    }
};
上一篇:纯Java实现的graphviz


下一篇:原生input-file图片上传,转base64存储到node或socket广播对应房间