国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

dreamweaver網(wǎng)站建設(shè)教程新網(wǎng)站怎么推廣

dreamweaver網(wǎng)站建設(shè)教程,新網(wǎng)站怎么推廣,設(shè)計(jì)網(wǎng)站頁面鑒賞技巧ppt,安陽吧235. 二叉搜索樹的最近公共祖先 - 力扣(LeetCode) 在一個(gè)二叉搜索樹中,兩個(gè)節(jié)點(diǎn) p 和 q 的最近公共祖先可以通過以下的算法找到: 從根節(jié)點(diǎn)開始。如果當(dāng)前節(jié)點(diǎn)的值大于 p 和 q 的值,那么你需要轉(zhuǎn)向左子樹。因?yàn)樵诙妗?article class="baidu_pl">

235. 二叉搜索樹的最近公共祖先 - 力扣(LeetCode)

在一個(gè)二叉搜索樹中,兩個(gè)節(jié)點(diǎn) p 和 q 的最近公共祖先可以通過以下的算法找到:

  1. 從根節(jié)點(diǎn)開始。
  2. 如果當(dāng)前節(jié)點(diǎn)的值大于 p 和 q 的值,那么你需要轉(zhuǎn)向左子樹。因?yàn)樵诙嫠阉鳂渲?#xff0c;左子樹的所有節(jié)點(diǎn)的值都比當(dāng)前節(jié)點(diǎn)的值小。
  3. 如果當(dāng)前節(jié)點(diǎn)的值小于 p 和 q 的值,那么你需要轉(zhuǎn)向右子樹。因?yàn)樵诙嫠阉鳂渲?#xff0c;右子樹的所有節(jié)點(diǎn)的值都比當(dāng)前節(jié)點(diǎn)的值大。
  4. 如果以上條件都不滿足,那么當(dāng)前節(jié)點(diǎn)就是 p 和 q 的最近公共祖先。

在 Python 中,這個(gè)算法可以像這樣實(shí)現(xiàn):

class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Nonedef lowestCommonAncestor(root, p, q):while root:if root.val > p.val and root.val > q.val:root = root.leftelif root.val < p.val and root.val < q.val:root = root.rightelse:return rootreturn None

在這個(gè)代碼中,lowestCommonAncestor 函數(shù)將接受一個(gè)二叉搜索樹的根節(jié)點(diǎn) root,和兩個(gè)需要找最近公共祖先的節(jié)點(diǎn) pq。然后它將返回 p 和 q 的最近公共祖先。如果沒有找到,那么它將返回 None。

注意這個(gè)算法假設(shè) p 和 q 都在這棵二叉搜索樹中。

701. 二叉搜索樹中的插入操作 - 力扣(LeetCode)

因?yàn)槭嵌鏄?#xff0c;直接按照規(guī)則遍歷,然后在對應(yīng)葉子結(jié)點(diǎn)插入

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if root is None:return TreeNode(val)pre = Nonedef traversal(cur, val, left_child=False):nonlocal preif cur is None:if left_child:pre.left = TreeNode(val)else:pre.right = TreeNode(val)returnpre = curif cur.val > val:traversal(cur.left, val, left_child=True)else:traversal(cur.right, val)traversal(root, val)return root

下面是GPT4對該代碼的優(yōu)化

你的代碼已經(jīng)很好地實(shí)現(xiàn)了插入操作。你在遍歷樹的時(shí)候,遞歸地找到插入節(jié)點(diǎn)的位置,然后創(chuàng)建新節(jié)點(diǎn)并插入到正確的位置。同時(shí),你用一個(gè)外部變量
pre 來跟蹤上一個(gè)節(jié)點(diǎn),以便在正確的位置插入新節(jié)點(diǎn)。

然而,你的代碼可以被優(yōu)化,使其更簡潔和易于理解。在優(yōu)化后的代碼中,你可以使用返回值,而不是外部變量來跟蹤插入的位置。這樣,你可以避免使用
nonlocal 關(guān)鍵字,并使函數(shù)的邏輯更加清晰。以下是優(yōu)化后的代碼:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right class Solution:def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if root is None:return TreeNode(val)if root.val > val:root.left = self.insertIntoBST(root.left, val)else:root.right = self.insertIntoBST(root.right, val)return root ```在優(yōu)化后的代碼中,插入新節(jié)點(diǎn)的邏輯被分配給遞歸調(diào)用的返回值,這使得代碼更加簡潔并且邏輯更加清晰。這個(gè)函數(shù)將創(chuàng)建一個(gè)新的 `TreeNode`
如果 `root` 是 `None`,否則它將遞歸地遍歷左子樹或右子樹,根據(jù) `val`
的值決定向哪個(gè)方向遍歷。然后,遞歸調(diào)用的返回值(即新節(jié)點(diǎn)或現(xiàn)有節(jié)點(diǎn))被分配給 `root.left` 或
`root.right`,從而實(shí)現(xiàn)插入操作。最后,函數(shù)返回 `root`,它現(xiàn)在可能有一個(gè)新的子節(jié)點(diǎn)。

450. 刪除二叉搜索樹中的節(jié)點(diǎn) - 力扣(LeetCode)

對于二叉搜索樹的刪除操作,主要分為以下幾個(gè)步驟:

  1. 找到需要刪除的節(jié)點(diǎn);
  2. 如果節(jié)點(diǎn)是葉子節(jié)點(diǎn),可以直接刪除;
  3. 如果節(jié)點(diǎn)只有一個(gè)孩子,可以直接將其父節(jié)點(diǎn)的相應(yīng)鏈接指向它的孩子;
  4. 如果節(jié)點(diǎn)有兩個(gè)孩子,需要找到其右子樹的最小節(jié)點(diǎn)(或左子樹的最大節(jié)點(diǎn)),用這個(gè)節(jié)點(diǎn)代替要刪除的節(jié)點(diǎn),然后刪除這個(gè)最小(或最大)節(jié)點(diǎn)。

以下是一個(gè)用Python實(shí)現(xiàn)的例子:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:if not root:return Noneif key < root.val:  # key在左子樹root.left = self.deleteNode(root.left, key)elif key > root.val:  # key在右子樹root.right = self.deleteNode(root.right, key)else:  # 找到key,進(jìn)行刪除操作if not root.left:  # 左子樹為空,直接返回右子樹return root.rightif not root.right:  # 右子樹為空,直接返回左子樹return root.leftelse:  # 左右子樹均不為空min_node = self.findMin(root.right)  # 找到右子樹的最小節(jié)點(diǎn)root.val = min_node.val  # 將最小節(jié)點(diǎn)的值復(fù)制到rootroot.right = self.deleteNode(root.right, min_node.val)  # 刪除右子樹中的最小節(jié)點(diǎn)return rootdef findMin(self, node: Optional[TreeNode]) -> Optional[TreeNode]:# 找到樹中的最小節(jié)點(diǎn)while node.left:node = node.leftreturn node

這個(gè)函數(shù)的思路主要是使用遞歸來找到要刪除的節(jié)點(diǎn),然后按照上面提到的規(guī)則刪除。在這個(gè)過程中,我們使用了一個(gè)輔助函數(shù) findMin 來找到一個(gè)樹中的最小節(jié)點(diǎn)。

總結(jié)

今天的題主要是將結(jié)點(diǎn)作為返回值,通過遍歷過程中更新左右子樹來完成對樹的操作

http://aloenet.com.cn/news/43354.html

相關(guān)文章:

  • 簡歷網(wǎng)站有哪些廈門人才網(wǎng)官網(wǎng)招聘
  • 南昌做任務(wù)的網(wǎng)站網(wǎng)站可以自己做嗎
  • 酒店網(wǎng)站建設(shè)注意什么四川seo選哪家
  • 網(wǎng)站模板 psd免費(fèi)注冊個(gè)人網(wǎng)站不花錢
  • 一家專業(yè)做家譜的網(wǎng)站seo網(wǎng)站內(nèi)容優(yōu)化
  • 做網(wǎng)站收入來源表寧波營銷型網(wǎng)站建設(shè)優(yōu)化建站
  • 專注七星彩網(wǎng)站開發(fā)品牌運(yùn)營公司
  • 制作網(wǎng)頁的軟件都有哪些內(nèi)蒙古seo
  • 展示型網(wǎng)站系統(tǒng)營銷最好的方法
  • 商城網(wǎng)站離不開支付系統(tǒng)推廣普通話宣傳內(nèi)容
  • 三站合一的網(wǎng)站怎么做網(wǎng)址大全百度
  • 重慶榮昌網(wǎng)站建設(shè)費(fèi)用疫情優(yōu)化調(diào)整
  • 寧波網(wǎng)站建設(shè)哪里有今天新聞?wù)畻l
  • 設(shè)計(jì)網(wǎng)站設(shè)計(jì)網(wǎng)站怎么制作公司網(wǎng)頁
  • 網(wǎng)站子站建設(shè)合同樣本免費(fèi)網(wǎng)頁制作平臺
  • 網(wǎng)站建設(shè)微信運(yùn)營公司seo流量
  • 營銷型網(wǎng)站建設(shè)中國最好的網(wǎng)絡(luò)營銷公司
  • 安慶什么網(wǎng)站做火商丘seo優(yōu)化
  • 剛做網(wǎng)站做什么網(wǎng)站好點(diǎn)互聯(lián)網(wǎng)營銷師培訓(xùn)費(fèi)用是多少
  • 北京網(wǎng)站備案速度電商代運(yùn)營收費(fèi)標(biāo)準(zhǔn)
  • 廈門網(wǎng)站建設(shè)開發(fā)公司百度關(guān)鍵詞指數(shù)查詢工具
  • 昆明市城鄉(xiāng)建設(shè)局網(wǎng)站網(wǎng)絡(luò)營銷方式有哪幾種
  • 成都個(gè)人網(wǎng)站制作公司網(wǎng)絡(luò)最有效的推廣方法
  • 桂林做網(wǎng)站多少錢贛州seo推廣
  • 做網(wǎng)站商城前景怎么樣上海seo有哪些公司
  • 網(wǎng)頁設(shè)計(jì)實(shí)訓(xùn)總結(jié)1500字寧波企業(yè)seo服務(wù)
  • 自助設(shè)計(jì)網(wǎng)站百度關(guān)鍵詞優(yōu)化公司哪家好
  • 下載免費(fèi)網(wǎng)站模板下載百度收錄網(wǎng)站鏈接入口
  • 用html5做的網(wǎng)站源碼影視站seo教程
  • 北京企業(yè)網(wǎng)站設(shè)計(jì)公司win10優(yōu)化大師好用嗎