第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在Python中迭代刪除二叉搜索樹中的值

在Python中迭代刪除二叉搜索樹中的值

陪伴而非守候 2023-09-19 14:30:14
我目前正在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法以及 BST 的課程。我已經(jīng)讓代碼可以工作并理解其中的大部分內(nèi)容,但我有一個(gè)關(guān)于刪除功能的問題。這就是我的代碼的樣子:class BST:    def __init__(self, value):        self.value = value        self.left = None        self.right = None    def insert(self, value):        currentNode = self        while True:            if value < currentNode.value:                if currentNode.left is None:                    currentNode.left = BST(value)                    break                else:                    currentNode = currentNode.left            else:                if currentNode.right is None:                    currentNode.right = BST(value)                    break                else:                    currentNode = currentNode.right        return self    def contains(self, value):        currentNode = self        while currentNode is not None:            if value < currentNode.value:                currentNode = currentNode.left            elif value > currentNode.value:                currentNode = currentNode.right            else:                return True        return False    def remove(self, value, parentNode = None):        currentNode = self        while currentNode is not None:            if value < currentNode.value:                parentNode = currentNode                currentNode = currentNode.left              elif value > currentNode.value:                parentNode = currentNode                currentNode = currentNode.right            #Found the node據(jù)我了解,對(duì)于刪除功能:循環(huán)while將迭代每個(gè)節(jié)點(diǎn)并運(yùn)行,直到?jīng)]有更多的節(jié)點(diǎn)第一個(gè)if和elif用于查找您要?jiǎng)h除的節(jié)點(diǎn)。適用else于實(shí)際刪除,有 3 個(gè)不同的選項(xiàng):要么currentNode有兩個(gè)子節(jié)點(diǎn),要么將其替換為右側(cè)節(jié)點(diǎn)的最左側(cè)值,然后從右側(cè)節(jié)點(diǎn)中刪除該最左側(cè)值。另一種情況是parentNode沒有父節(jié)點(diǎn),這將是根節(jié)點(diǎn)的情況。currentNode最后一種情況是,當(dāng)您只有一個(gè)子節(jié)點(diǎn)時(shí),您所要做的就是更改其左節(jié)點(diǎn)或右節(jié)點(diǎn)的值(取決于它有哪一個(gè))。我不清楚的是條件背后的邏輯,以及當(dāng)我們想要?jiǎng)h除節(jié)點(diǎn)時(shí)它是如何工作的root。代碼不是應(yīng)該也運(yùn)行第一個(gè)條件,即兩個(gè)子節(jié)點(diǎn)的條件嗎?我?guī)缀蹩梢钥隙ㄟ@不應(yīng)該發(fā)生,并且該條件應(yīng)該只適用于其特殊情況。我看了一遍又一遍的視頻解釋,但我就是無法掌握其中的竅門。
查看完整描述

1 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

當(dāng)我們想要?jiǎng)h除根節(jié)點(diǎn)時(shí)。代碼不是應(yīng)該也運(yùn)行第一個(gè)條件,即兩個(gè)子節(jié)點(diǎn)的條件嗎?

即使必須刪除根節(jié)點(diǎn),它實(shí)際上也會(huì)評(píng)估第一個(gè)條件。如果根節(jié)點(diǎn)同時(shí)具有左子節(jié)點(diǎn)和右子節(jié)點(diǎn),則“選項(xiàng) 1”適用于它:第一個(gè)選項(xiàng)可以很好地處理具有兩個(gè)子節(jié)點(diǎn)的任何節(jié)點(diǎn),無論它是否是根節(jié)點(diǎn)。在此選項(xiàng)中不需要區(qū)分根節(jié)點(diǎn)或非根節(jié)點(diǎn)。

其他兩個(gè)選項(xiàng)僅適用于沒有兩個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)。您似乎建議(也在代碼注釋中)只有選項(xiàng) 3 可以處理這種情況,但選項(xiàng) 2 也可以。選項(xiàng)2適用于當(dāng)節(jié)點(diǎn)node沒有兩個(gè)子節(jié)點(diǎn)并且它是根節(jié)點(diǎn)時(shí)。如果根有 2 個(gè)孩子,則將被視為選項(xiàng) 1。


查看完整回答
反對(duì) 回復(fù) 2023-09-19
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)