微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每日一题 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--;
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐