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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

1 回答

?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

當我們想要刪除根節(jié)點時。代碼不是應該也運行第一個條件,即兩個子節(jié)點的條件嗎?

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

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


查看完整回答
反對 回復 2023-09-19
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號