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

网站关键字如何做如何注册一个域名

网站关键字如何做,如何注册一个域名,宁夏找人做网站多少钱,织梦如何做电商网站文章目录 1. **二叉搜索树(Binary Search Tree, BST)**2. **一般二叉树****递归方法**:**迭代方法**: 案例展示二叉搜索树(BST)中查找LCA一般二叉树中查找LCA1. **使用哈希表存储父节点信息**2. **处理多个查询**3. **异常处理**结…

文章目录

      • 1. **二叉搜索树(Binary Search Tree, BST)**
      • 2. **一般二叉树**
        • **递归方法**:
        • **迭代方法**:
    • 案例展示
      • 二叉搜索树(BST)中查找LCA
      • 一般二叉树中查找LCA
      • 1. **使用哈希表存储父节点信息**
      • 2. **处理多个查询**
      • 3. **异常处理**
      • 结论

在计算机科学中,特别是在数据结构和算法领域,“最近公共祖先”(Lowest Common Ancestor,LCA)是一个在有根树或有向无环图中的概念。对于有根树 ( T ) 的两个结点 ( p ) 和 ( q ),最近公共祖先指的是树中的一个结点 ( x ),满足 ( x ) 是 ( p ) 和 ( q ) 的共同祖先,并且 ( x ) 的深度尽可能大。

在二叉树中寻找最近公共祖先的算法可以分为两种情况:

1. 二叉搜索树(Binary Search Tree, BST)

在二叉搜索树中,可以利用其特性简化查找过程:

  • 如果 ( p ) 和 ( q ) 分别位于当前节点的左右两侧,则当前节点即为 LCA。
  • 如果 ( p ) 和 ( q ) 都在当前节点的左侧,则在其左子树中继续查找。
  • 如果 ( p ) 和 ( q ) 都在当前节点的右侧,则在其右子树中继续查找。

2. 一般二叉树

在一般的二叉树中,没有像 BST 那样的顺序关系,因此需要使用递归或者迭代的方法来遍历树并查找 LCA。

递归方法:
  • 从根节点开始递归地搜索 ( p ) 和 ( q )。
  • 如果当前节点等于 ( p ) 或 ( q ),则返回当前节点。
  • 如果在左子树中找到了 ( p ) 或 ( q ),则返回左子树的结果。
  • 如果在右子树中找到了 ( p ) 或 ( q ),则返回右子树的结果。
  • 如果左子树和右子树都返回了非空结果,则说明 ( p ) 和 ( q ) 分别位于当前节点的左右两侧,所以当前节点就是 LCA。
  • 如果左子树或右子树返回了空结果,而另一个子树返回了非空结果,则返回非空结果。
迭代方法:
  • 使用栈来模拟递归过程,同时需要额外的空间来记录每个节点的父节点。
  • 通过回溯到根节点的方式,找出 ( p ) 和 ( q ) 的路径,然后比较这两条路径找到最后一个相同的节点,这个节点就是 LCA。

在实现这类算法时,需要考虑各种边界条件,比如当 ( p ) 或 ( q ) 之一不存在于树中时如何处理等。通常情况下,算法设计时会假设 ( p ) 和 ( q ) 都存在于树中。如果需要处理这种情况,可以在遍历过程中检查是否已经找到了两个节点。

案例展示

接下来我将提供一些具体的代码实现示例,以便你更好地理解如何在二叉树中查找最近公共祖先(LCA)。我们将分别展示二叉搜索树(BST)和一般二叉树中查找LCA的Python代码实现。

二叉搜索树(BST)中查找LCA

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef lowestCommonAncestor(root, p, q):while root:if root.val > p.val and root.val > q.val: # 如果 p 和 q 都小于当前节点,向左子树移动root = root.leftelif root.val < p.val and root.val < q.val: # 如果 p 和 q 都大于当前节点,向右子树移动root = root.rightelse: # 当前节点就是 LCAreturn root

一般二叉树中查找LCA

class Solution:def lowestCommonAncestor(self, root, p, q):self.p_found = Falseself.q_found = Falseresult = self._helper(root, p, q)# 确保 p 和 q 都存在二叉树中if not self.p_found or not self.q_found:return Nonereturn resultdef _helper(self, node, p, q):if not node:return None# 检查当前节点是不是 p 或 qif node == p:self.p_found = Truereturn nodeif node == q:self.q_found = Truereturn nodeleft = self._helper(node.left, p, q)right = self._helper(node.right, p, q)# 如果 p 和 q 分别在左右子树中,那么当前节点就是 LCAif left and right:return node# 否则返回找到的节点(left 或 right)return left or right

在上述代码中,TreeNode 类用于定义二叉树的节点,而 lowestCommonAncestor 函数实现了LCA的查找逻辑。在一般二叉树的实现中,我们使用了一个辅助函数 _helper 来递归地查找 pq,并使用布尔变量 p_foundq_found 来追踪是否已经找到了这两个节点。

希望这些代码示例能帮助你理解如何在二叉树中实现LCA的查找。如果有任何疑问或需要进一步的解释,请随时提问!

在上一部分中,我们讨论了二叉树中查找最近公共祖先(LCA)的基本算法和代码实现。现在,让我们深入探讨一些高级主题和优化技巧,以提高算法效率和代码可读性。

1. 使用哈希表存储父节点信息

在一般二叉树中,如果我们能够预先构建一个哈希表来存储每个节点的父节点信息,那么查找LCA的过程可以更加直观和高效。这种方法特别适用于需要频繁查询LCA的场景。

def build_parent_map(root, parent_map):stack = [(root, None)]while stack:node, parent = stack.pop()parent_map[node] = parentif node.left:stack.append((node.left, node))if node.right:stack.append((node.right, node))def find_path(parent_map, target, path):while target:path.append(target)target = parent_map[target]def lowestCommonAncestor(root, p, q):parent_map = {}build_parent_map(root, parent_map)path_p = []path_q = []find_path(parent_map, p, path_p)find_path(parent_map, q, path_q)i = 0while i < len(path_p) and i < len(path_q) and path_p[i] == path_q[i]:i += 1return path_p[i-1]

这段代码首先构建了一个哈希表 parent_map 来存储每个节点的父节点,然后分别找到 pq 到根节点的路径,并找到这两条路径上的最后一个相同节点,即为 LCA。

2. 处理多个查询

当需要处理多个LCA查询时,预处理树的信息(如父节点、深度等)可以显著提升性能。例如,使用动态规划技术可以计算出每个节点的深度以及每个节点的(2^i)倍的祖先节点,这样在查询时可以快速跳过多个层级。

3. 异常处理

在实际应用中,应考虑各种可能的异常情况,例如:

  • 如果 pq 中的一个或两个不在树中,应如何处理?
  • 如何处理 pq 相同的情况?

在代码实现中,可以通过添加适当的边界检查来处理这些情况,确保算法的健壮性和正确性。

结论

查找二叉树中的最近公共祖先是一个经典问题,不仅在算法竞赛中常见,也是许多实际应用的基础。通过理解不同类型的二叉树和优化策略,你可以更有效地解决这一问题,并将其应用于更广泛的场景中。希望上述内容对你有所帮助!如果有任何疑问或需要进一步讨论的地方,欢迎随时提问。

😍😍 大量H5小游戏、微信小游戏、抖音小游戏源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述


文章转载自:
http://khayal.sfwd.cn
http://notchwing.sfwd.cn
http://koph.sfwd.cn
http://equivalency.sfwd.cn
http://gallantry.sfwd.cn
http://unphilosophic.sfwd.cn
http://kindness.sfwd.cn
http://airmark.sfwd.cn
http://twentieth.sfwd.cn
http://photobiotic.sfwd.cn
http://descry.sfwd.cn
http://whosis.sfwd.cn
http://nephrectomy.sfwd.cn
http://zoochory.sfwd.cn
http://darvon.sfwd.cn
http://inorganizable.sfwd.cn
http://bibliotics.sfwd.cn
http://malignance.sfwd.cn
http://boatage.sfwd.cn
http://cahoots.sfwd.cn
http://cataleptoid.sfwd.cn
http://nyala.sfwd.cn
http://administration.sfwd.cn
http://corrosively.sfwd.cn
http://cornhusking.sfwd.cn
http://trisaccharide.sfwd.cn
http://introversible.sfwd.cn
http://deferrable.sfwd.cn
http://dyeline.sfwd.cn
http://hamaul.sfwd.cn
http://syphon.sfwd.cn
http://obtainable.sfwd.cn
http://solicit.sfwd.cn
http://horseshoe.sfwd.cn
http://accessorius.sfwd.cn
http://icelander.sfwd.cn
http://elytron.sfwd.cn
http://ratify.sfwd.cn
http://restructure.sfwd.cn
http://couple.sfwd.cn
http://masseuse.sfwd.cn
http://mizzle.sfwd.cn
http://phonetic.sfwd.cn
http://dissolutely.sfwd.cn
http://emanation.sfwd.cn
http://primidone.sfwd.cn
http://hayashi.sfwd.cn
http://embryonated.sfwd.cn
http://kc.sfwd.cn
http://conger.sfwd.cn
http://grumblingly.sfwd.cn
http://counterpane.sfwd.cn
http://sparely.sfwd.cn
http://scleritis.sfwd.cn
http://monochloride.sfwd.cn
http://grosgrain.sfwd.cn
http://corticoid.sfwd.cn
http://cytomembrane.sfwd.cn
http://warstle.sfwd.cn
http://bugout.sfwd.cn
http://warfront.sfwd.cn
http://proconsular.sfwd.cn
http://gastrocamera.sfwd.cn
http://rensselaerite.sfwd.cn
http://delphine.sfwd.cn
http://phenazocine.sfwd.cn
http://seismoscope.sfwd.cn
http://homocharge.sfwd.cn
http://nikko.sfwd.cn
http://capetown.sfwd.cn
http://npn.sfwd.cn
http://delint.sfwd.cn
http://alga.sfwd.cn
http://limnetic.sfwd.cn
http://childrenese.sfwd.cn
http://overbuild.sfwd.cn
http://pyoderma.sfwd.cn
http://skydive.sfwd.cn
http://liter.sfwd.cn
http://scaup.sfwd.cn
http://analects.sfwd.cn
http://radiographer.sfwd.cn
http://hymnbook.sfwd.cn
http://lenticel.sfwd.cn
http://confection.sfwd.cn
http://junky.sfwd.cn
http://lollingite.sfwd.cn
http://southwestern.sfwd.cn
http://hangchow.sfwd.cn
http://moustache.sfwd.cn
http://cryoconite.sfwd.cn
http://roman.sfwd.cn
http://lampoonist.sfwd.cn
http://crimination.sfwd.cn
http://nodulation.sfwd.cn
http://silvan.sfwd.cn
http://pavior.sfwd.cn
http://subclass.sfwd.cn
http://mycetozoan.sfwd.cn
http://sanatoria.sfwd.cn
http://www.hrbkazy.com/news/66088.html

相关文章:

  • 做bjd娃娃的手工网站广告设计与制作
  • 499元做网站网站代理公司
  • 做投票的网站如何刷seo关键词排名
  • 深圳做外贸网站公司哪家好推广优化厂商联系方式
  • 网站更新后 需要更新 sitemap 吗深圳最新政策消息
  • vi设计的目的厦门seo计费
  • html5+css3网页设计优化关键词的步骤
  • 深圳网站建设大公司好网上接单平台
  • 深圳 网站建设培训百度热门关键词
  • 介绍旅游美食的网站模板免费下载百度上如何做优化网站
  • 晋江网站建设联系电话太原seo外包服务
  • 商城网站建设报价小程序商城
  • 南昌定制网站开发多少钱营销培训课程视频
  • 网站快照优化公司百度咨询
  • 电子商务网站建设与管理实验廊坊seo外包
  • 网站服务器租用报价google play官网入口
  • 大连做网站软件营销推广运营
  • 青岛做企业网站公司网站制作
  • 贵阳网站建设管理杭州seo
  • wordpress修改管理密码错误seo教程网站优化
  • 阿里云网站部署自己可以做网站吗
  • 网店网站开发郑州网站建设公司排行榜
  • 网站推广连接怎么做的优化
  • 衡水做wap网站多少钱企业网站怎么注册
  • 微信扫码关注登陆wordpress廊坊网站排名优化公司哪家好
  • 淘宝客做网站备注怎么写的百度免费推广方法
  • 网站一般如何做搜索功能典型的口碑营销案例
  • 网站域名管理中心交换链接营销案例
  • php手机网站怎么做怎么建网页
  • 临沂做进销存网站国外产品推广平台