首页 > 编程语言 >代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作

代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作

时间:2023-06-01 19:35:10浏览次数:53  
标签:right TreeNode val self 随想录 二叉 搜索 root 节点

[参考链接]

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

[注意]

1.因为是有序树,所以如果中间节点是 q 和 p 的公共祖先,那么中间节点的数组 一定是在[p, q]区间的。即中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。

2.那么只要从上到下去遍历,遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是q 和 p的公共祖先。 

3.遍历顺序无所谓,没有中间处理逻辑,只要有一个左一个右就可以.

[代码]

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution(object):
 9     def lowestCommonAncestor(self, root, p, q):
10         """
11         :type root: TreeNode
12         :type p: TreeNode
13         :type q: TreeNode
14         :rtype: TreeNode
15         """
16         #1.递归法
17         #左
18         if root.val > p.val and root.val > q.val:
19             return self.lowestCommonAncestor(root.left, p, q)
20         #右
21         if root.val < p.val and root.val < q.val:
22             return self.lowestCommonAncestor(root.right, p, q)
23         #cur处在中间
24         return root
25 
26         #2.迭代法
27         while True:
28             if root.val > p.val and root.val > q.val:
29                 root = root.left
30             elif root.val < p.val and root.val < q.val:
31                 root = root.right
32             else:
33                 return root

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

[注意]

1.只要遍历二叉搜索树,找到空节点 插入元素就可以了,

2.把添加的节点返回给上一层,就完成了父子节点的赋值操作了,

[代码]

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution(object):
 8     def insertIntoBST(self, root, val):
 9         """
10         :type root: TreeNode
11         :type val: int
12         :rtype: TreeNode
13         """
14         # 返回更新后的以当前root为根节点的新树,方便用于更新上一层的父子节点关系链
15 
16         # Base Case
17         if not root: return TreeNode(val)
18 
19         # 单层递归逻辑:
20         if val < root.val: 
21             # 将val插入至当前root的左子树中合适的位置
22             # 并更新当前root的左子树为包含目标val的新左子树
23             root.left = self.insertIntoBST(root.left, val)
24 
25         if root.val < val:
26             # 将val插入至当前root的右子树中合适的位置
27             # 并更新当前root的右子树为包含目标val的新右子树
28             root.right = self.insertIntoBST(root.right, val)
29 
30         # 返回更新后的以当前root为根节点的新树
31         return root

 

标签:right,TreeNode,val,self,随想录,二叉,搜索,root,节点
From: https://www.cnblogs.com/wuyijia/p/17449957.html

相关文章

  • 获得淘宝天猫搜索词推荐商品全网搜索接口演示示例(支持高并发)
    ​ 淘宝天猫是中国最大的电商平台之一,淘宝天猫通过不同的形式来满足用户的需求,为商家提供多样化的销售渠道,持续扩大服务范围和用户基础。我们如果需要获得搜索词推荐商品,又因为受其他的种种限制无法达到这一目的,那我们完全可以通过代码的形式使用该接口对接实现;【接口使用教程......
  • 正则表达式:用于搜索替换、分割内容
       ......
  • 搜索算法
    搜索算法搜索寻路可视化传送门1传送门2网页嵌入如下(拖动星星以改变起点)##DijkstraBFS启发式搜索A*......
  • 图解LeetCode——98. 验证二叉搜索树
    一、题目给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。二、示例2.1>示例1:【输入】root=[......
  • wireshark 查找 DNS 域名——编辑里查找 选择分组详情里去按照字符串搜索即可
    ......
  • JS 树型结构 模糊搜索 匹配到所有的节点,包括所有的父节点
    treeData就是el-tree:data要绑定的数据 :data=treeData treeOptions.data是接口返回的原始树形结构数据//根据关键字过滤后的数据consttreeData=computed(()=>{  if(!options.searchText)returntreeOptions.data;  letmhres=filterNodeMethod(opti......
  • 进程注入分析实战——通过process explorer可以看到lab12-01.dll在运行时加载了, 要查
     要查看dll被哪个进程所使用,可以在processexplorer里搜索!  这个技巧在分析恶意DLL加载时候非常有用!!!笔记可以通过processexplorer查看进程注入的dll,比如注入后可以看到lab12-01.dll在注入的运行进程里。    启动器Launcher用来加载恶意代码使用,通常在资源中包含一个exe或d......
  • iOS-高仿通讯录之商品索引排序搜索
    概述TableView添加右侧索引,将数据按照索引分组排序,并添加搜索功能且在搜索界面复用当前页面.详细项目中像一些商品搜索类界面,TableView添加右侧索引的使用越来越多,的确用户体验提高了许多.一、主要思路大致思路:1.添加并设置右侧索引2.自定义汉字转化成拼......
  • 简述Python的作用域以及Python搜索变量的顺序
    Python作用域简单说就是一个变量的命名空间。代码中变量被赋值的位置,就决定了哪些范围的对象可以访问这个变量,这个范围就是变量的作用域。在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域。Python的变量名解析机制也称为LEGB法则:本地作用域(Local)→当前作......
  • 输入框搜索测试点__肖sir__测试点整理
    功能:是否可以进行模糊查询,是否可以进行精准查询,是否可以查看之前记录,是否支持回车键搜索,是否可以查看热门搜索性能:搜索完成后是否可以快速显示查询内容,搜索的内容与搜索标题是否一致界面:该支付的功能界面是否按照UI原型图进行设计,布局是否一致,界面是否美观易用:点击搜索框就可以......