随想录二刷Day22——二叉树
创始人
2025-05-30 16:15:33
0

文章目录

  • 二叉树
    • 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;}
};

相关内容

热门资讯

安卓系统比ios容量,iOS系... 你有没有想过,为什么你的安卓手机总是比iOS手机看起来能装下更多的东西呢?这背后其实有着不少门道呢!...
安卓系统如何有两个系统,安卓设... 你有没有想过,你的安卓手机里竟然可以藏着一个秘密世界?没错,就是可以同时拥有两个系统!这听起来是不是...
安卓系统崩溃进不去,深度解析故... 手机突然间罢工了,屏幕上黑漆漆的,安卓系统崩溃了,你心里是不是慌得一批?别急,今天就来给你详细说说安...
苹果系统游戏怎么变安卓,轻松实... 你有没有想过,那些在苹果系统上玩得如痴如醉的游戏,怎么就能在安卓系统上继续畅玩呢?是不是觉得这中间隔...
xp系统读取安卓手机,数据同步... 你有没有想过,你的XP系统竟然能读取安卓手机的数据呢?这听起来是不是有点神奇?别急,今天就来带你一探...
安卓系统用的流量,揭秘手机流量... 你有没有发现,手机里的安卓系统用流量那叫一个“疯狂”?有时候,明明没做什么大动作,流量就“嗖”的一下...
入门安卓机32位系统,轻松驾驭... 你有没有想过,拥有一台入门级的安卓手机,却因为32位系统而头疼不已?别急,今天就来给你详细解析一下这...
安卓系统怎么下对峙2,操作指南... 你有没有想过,在安卓系统上下载一款叫做“对峙2”的游戏会是怎样的体验呢?这款游戏在众多玩家中可是小有...
安卓车机好用系统推荐,打造智能... 你有没有发现,现在开车的时候,车机系统的重要性简直堪比导航仪呢!想象一边听着动感的音乐,一边看着实时...
安卓双系统内存卡,安卓双系统内... 你有没有想过,为什么你的安卓手机有时候会卡得像蜗牛一样?其实,这跟你的内存卡有着千丝万缕的关系呢!今...
安卓系统怎么取消双卡,安卓系统... 手机里的双卡功能,有时候真是让人又爱又恨。有时候,你可能会觉得两个卡槽太占地方,或者一个卡槽的流量用...
安卓系统被篡改怎么修复,快速修... 手机突然变得不听使唤了?安卓系统被篡改,是不是让你心头一紧?别慌,今天就来手把手教你如何修复安卓系统...
倩女幽魂ios系统和安卓系统,... 你有没有玩过倩女幽魂这款游戏呢?它可是近年来非常火爆的一款手游,无论是倩女幽魂ios系统还是安卓系统...
现在安卓手机什么系统,揭秘最新... 你有没有发现,现在走在街上,几乎每个人手里都拿着一部安卓手机?那么,问题来了,现在安卓手机都运行着什...
安卓系统能校准坐标吗,坐标定位... 你有没有想过,你的安卓手机里的地图导航是不是有时候会“迷路”?别急,今天就来聊聊这个话题:安卓系统能...
王者荣耀安卓系统进不去,王者荣... 最近是不是有不少王者荣耀的安卓玩家遇到了一个让人头疼的问题——进不去游戏?别急,今天就来给你详细解析...
c11系统是安卓系统吗,揭秘其... 你有没有听说过C11系统?是不是好奇它是不是安卓系统的一员呢?今天,就让我带你一探究竟,揭开这个神秘...
安卓系统上有没有safari,... 你有没有想过,在安卓系统上,我们能不能也像在苹果手机上那样,使用Safari浏览器呢?这可是个让人好...
小米是安卓系统的吗,引领智能生... 亲爱的读者,你是否曾好奇过,那些在我们生活中无处不在的小米手机,它们到底是不是安卓系统的呢?今天,就...
Windows11安卓子系统 亲爱的读者们,你是否也像我一样,对Windows 11的新功能充满了好奇和期待?今天,我要和你聊聊一...