当前位置: 首页 > article >正文

LeetCode面试题Day19|LC104 二叉树的最大深度

题目1:

指路:. - 力扣(LeetCode)104 二叉树的最大深度

思路与分析:

求最大深度这里我们分别找到左子树和右子树的最大深度,当左右节点为空时停止递归,最后返回左右子树的较大深度,不要忘记最后加上根节点。

代码:

/**
 * 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 ans = 0;
        if (root == NULL) return 0;
        int leftdepth = maxDepth(root->left);
        int rightdepth = maxDepth(root->right);
        ans = max(leftdepth, rightdepth) + 1;
        return ans;
    }
};

题目2:

指路:. - 力扣(LeetCode)100 相同的树

思路与分析:

相同的树要求为两点:结构相同,节点值相同。而结构相同有两种情况,都为空或者是不为空的情况下结构相同,节点值相同则要求每个节点对于的值都相同。条件不满足则返回false,否则返回true。

代码:

/**
 * 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:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p == nullptr && q == nullptr) {
            return true;
        } else if (p == nullptr || q == nullptr) {
            return false;
        } else if (p->val != q->val) {
            return false;
        } else {
            return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
        }
    }
};

还有一种结合性较强的代码,给大家注释了一下,了解即可。

/**
 * 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:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        return !p || !q ? p == q : isSameTree(p->left, q->left) 
        && isSameTree(p->right, q->right)
        && p->val == q->val;
        // 判断当p或q二者有一个为空时,判断二者是否相同,相同则说明二者都为空,返回true,
        // 否则,将返回p的left和q的left,这里需要同时满足三个条件:
        // 1.p的左子树==q的左子树
        // 2.p的右子树==q的右子树
        // 3.p和q对应的节点值相等
        // 满足以上三个条件才能返回第二种true,否则为false
    }
};


http://www.kler.cn/a/280870.html

相关文章:

  • RASA使用长文记录以及一些bug整理
  • JAVA 17中List按照组合键分组
  • 3148. 矩阵中的最大得分
  • 摄影曝光:曝光模式认知
  • unity Android + WebGL 浏览器打开
  • 牛客练习小题,牛客. 矩阵最长递增路径牛客.奇数位丢弃牛客.天使果冻牛客.dd爱旋转
  • 今日算法:蓝桥杯基础题之“门牌制作”
  • DRF——pagination分页模块
  • Qt是不是经常写个QWidget输入参数?
  • 使用Axure打造智慧场景下的数据可视化大屏原型
  • 【P4387 【深基15.习9】验证栈序列 java版本
  • Vue.js 中使用 AG Grid 实现高性能数据表格
  • 部署SAM2遇到的问题
  • P6242 【模板】线段树 3(区间最值操作、区间历史最值)
  • 2024广东省职业技能大赛云计算赛项实战——安装ELK日志分析服务
  • 可定制化内容具体识别事物,多方位同时监管的智慧快消开源了
  • C++常见的十种常见排序算法汇总
  • WebRTC 实时通信:构建高效网页视频通话的秘诀
  • Java基础(4)- IDEA
  • 宝塔安装yasd 远程调试 swoole