代码随想录刷题学习日记

news/2024/11/13 15:28:10/

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

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

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

提供参数:根结点root

关键思路:二叉搜索树和普通二叉树的区别在于它的左右是有顺序的,故通过选择进行确定遍历左子树还是右子树,不需要进行回溯,在本题中体现为判断当前节点值是否在p,q节点值的区间内。出现最近公共祖先只有两种情况:

1.左子树出现p(q),右子树出现q(p)。这种情况下该结点就是最近公共祖先。

2.两个节点都在同一个子树,那么需要继续向该子树遍历。

在本题中,判断是否为最近公共祖先条件为是否满足当前节点值在区间[p,q]或[q,p]中。

情况1显然满足该条件。

情况二中显然也满足该条件,两个节点出现在同一个子树,继续遍历,在一条路径上的情况找公共祖先节点也可由是否满足区间来判断。

代码大致如下:

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {return traversal(root,p,q);}public TreeNode traversal(TreeNode node, TreeNode p, TreeNode q){//1.终止条件if(node==null)return null;//2.单层递归逻辑//2.1全在左子树if(node.val>p.val&&node.val>q.val){TreeNode left=traversal(node.left,p,q);if(left!=null)return left;}//2.2全在右子树if(node.val<p.val&&node.val<q.val){TreeNode right=traversal(node.right,p,q);if(right!=null)return right;}//2.3在中间节点return node;}

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

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。

提供参数:根结点root,值val。

关键思路:简单遍历二叉搜索树找到提供val构造出节点应该在的位置,并与它的父节点联系起来。

代码大致如下:

    public TreeNode insertIntoBST(TreeNode root, int val) {//1.终止条件if(root==null){TreeNode node=new TreeNode(val);return node;}//2.单层递归逻辑//2.1if(root.val>val)root.left=insertIntoBST(root.left,val);if(root.val<val)root.right=insertIntoBST(root.right,val);return root;}


http://www.ppmy.cn/news/1546078.html

相关文章

【Rust Crate之Actix Web(一)】

Rust Crate之Actix Web 什么是Actix Web&#xff1f;Actix Web 入门代码宏展开,看看 #[get("/")] 做了什么Actix Web中的StateActix Web中的scopeActix Web中的extractorsPathQueryJSONURL-encoded form 总结 什么是Actix Web&#xff1f; Actix Web is a poweful &…

Unity Job System详解(5)——NativeHashSet/Map源码分析

不再贴完整源码&#xff0c;只贴关键部分源码 需要先看懂C# 字典原理 NativeHashSet的定义为&#xff1a; public unsafe struct NativeHashSet<T>: INativeDisposable, IEnumerable<T> where T : unmanaged, IEquatable<T> NativeHashMap的定义为&#…

gtfToGenePred如何下载

gtfToGenePred 是 UCSC 提供的一款工具&#xff0c;用于将 GTF&#xff08;Gene Transfer Format&#xff09;文件转换为 GenePred 格式的基因注释文件。由于不同的生物信息学分析工具对基因注释文件的格式要求不同&#xff0c;gtfToGenePred 的主要作用就是让 GTF 文件能够兼容…

linux系统中涉及到用户管理的命令知识

用户创建与密码设置 Linux中新建用户使用useradd命令&#xff0c;只有root用户才能执行&#xff0c;若useradd命令直接输入不管用&#xff0c;可使用绝对路径/usr/sbin/useradd。设置用户登录密码使用passwd命令。 su命令相关 su代表switch user&#xff0c;用于切换用户。切换…

开放寻址法、链式哈希数据结构详细解读

一、开放寻址法&#xff08;Open Addressing&#xff09; 1. 定义 开放寻址法是一种哈希冲突解决策略&#xff0c;所有元素都存储在哈希表中。当发生冲突时&#xff0c;即两个键计算出的哈希值相同时&#xff0c;会按照一定的探查序列查找下一个可用的位置来存储新元素。 2.…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 &#xff08;二&#xff09; 一、前言 目前鸿蒙应用的实现逻辑&#xff0c;基本都是参考和移植Android端来实现。针对BLE低功耗蓝牙来说&#xff0c;在鸿蒙化的实现过程中。我们发现了&#xff0c;鸿蒙独有的优秀点&#xff0c…

机器学习3_支持向量机_线性不可分——MOOC

线性不可分的情况 如果训练样本是线性不可分的&#xff0c;那么上一节问题的是无解的&#xff0c;即不存在 和 满足上面所有N个限制条件。 对于线性不可分的情况&#xff0c;需要适当放松限制条件&#xff0c;使得问题有解。 放松限制条件的基本思路&#xff1a; 对每个训…

Codeforces Round 984 (Div. 3)

题目链接 A. Quintomania 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;vector<int>arr(n);fer(i, 0 ,n) cin >> arr[i];fer(i, 1, n){if(abs(arr[i] - arr[i - 1]) ! 5 && abs(arr[i] - arr[i - 1]) ! 7){cout << "N…