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

随想录二刷Day22——二叉树

文章目录

  • 二叉树
    • 26. 二叉树的最近公共祖先
    • 28. 二叉搜索树的最近公共祖先
    • 29. 二叉搜索树中的插入操作

二叉树

26. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先

思路:
后续遍历,如果找到目标节点,则返回目标节点,否则返回空。
每次回溯查看左右子树的返回值,如果有一个目标,则返回目标节点。
如果两个点都找到了,直接返回当前节点为最近公共祖先。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == nullptr || root == p || root == q) return root;
        TreeNode *left = lowestCommonAncestor(root->left, p, q);
        TreeNode *right =  lowestCommonAncestor(root->right, p, q);
        
        if (left && right) return root;
        if (left == nullptr) return right;
        return left;
    }
};

28. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先

思路:
根据二叉搜索数的特性,两个节点的最近公共祖先的值一定在两节点之间(或者是某一个节点)。迭代法直接找即可。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        while (root) {
            if (root->val > p->val && root->val > q->val) root = root->left;
            else if (root->val < p->val && root->val < q->val) root = root->right;
            else return root;
        }
        return nullptr;
    }
};

29. 二叉搜索树中的插入操作

701. 二叉搜索树中的插入操作

方法1: 递归法
找到目标位置,通过递归返回值插入节点。

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if (root == nullptr) {
            TreeNode *node = new TreeNode(val);
            return node;
        }
        if (root->val > val) root->left = insertIntoBST(root->left, val);
        if (root->val < val) root->right = insertIntoBST(root->right, val);
        return root;
    }
};

方法2:迭代法
需要目标位置,同时记录目标位置的父节点,方便插入节点。

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if (root == nullptr) {
            TreeNode *node = new TreeNode(val);
            return node;
        }
        TreeNode *cur = root;
        TreeNode *parent = root;
        while (cur) {
            parent = cur;
            if (cur->val > val) cur = cur->left;
            else if (cur->val < val) cur = cur->right;
        }
        cur = new TreeNode(val);
        if (parent->val > val) parent->left = cur;
        else if (parent->val < val) parent->right = cur;

        return root;
    }
};

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

相关文章:

  • 关于物联网的基础知识(二)——物联网体系结构分层
  • 力扣经典题目之219. 存在重复元素 II
  • vue el table 不出滚动条样式显示 is_scrolling-none,如何修改?
  • MATLAB语言的正则表达式
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的动物检测识别系统(python+卷积神经网络)
  • 【JAVA】java中将一个list进行拆解重新组装
  • Jmeter之常用断言总结篇
  • vue2+高德地图web端开发使用
  • 百度文心一言对标 ChatGPT,你怎么看?
  • “跟消费谈恋爱,跟科技结婚”,汤臣倍健开启VDS新周期
  • MPC 101:安全多方计算与多方签名
  • 依赖注入~
  • 使用Java导入、导出excel详解(附有封装好的工具类)
  • 南京邮电大学数据库第一次课后作业
  • 一文彻底读懂webpack常用配置
  • Python图像处理【10】基于离散余弦变换的图像压缩
  • ChatGPT说:如何利用ChatGPT变现?躺着赚钱不是梦。
  • C++程序调用IsBadReadPtr或IsBadWritePtr引发内存访问违例问题的排查
  • 【全网唯一】 自己动手实现 FreeRTOS-metal-SU
  • Nginx学习笔记(三)Linux环境下Nginx的安装和部署
  • 逻辑覆盖测试用例设计
  • PostMan工具的使用
  • 利用Sklearn框架实现简单线性回归,用于预测房价
  • 用 ChatGPT 辅助学好机器学习
  • 学习 Python 之 Pygame 开发魂斗罗(十二)
  • REDIS18_