資料結構筆記 25 二叉樹刪除結點

2021-10-20 14:00:38 字數 1581 閱讀 2765

本節任務:

如果刪除的節點是葉子節點,則刪除該節點

如果刪除的節點是非葉子節點,則刪除該子樹

測試刪除5號葉子節點和3號子樹

思路**:

規定:如果刪除的節點是葉子節點,則刪除該節點。

如果刪除的節點是非葉子節點,則刪除該子樹。

把判斷root的邏輯寫在binarytree二叉樹的刪除方法裡,然後遞迴的邏輯寫在heronode節點的刪除方法裡。

思路:首先處理:

考慮如果樹是空樹,和如果只有乙個root節點,則等價於將二叉樹置空。

public

void

delnode

(int no)

else

}else

}

然後進行下面的步驟:

因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除,而不能去判斷當前這個結點是不是需要刪除的

如果當前結點的左子結點不為空,並且左子結點就是要刪除結點,就將this.left=null;並且就返回(結束遞迴刪除)

如果當前結點的右子結點不為空,並且右子結點就是要刪除結點,就將this. right=null;並且就返回(結束遞迴刪除)

如果第2和第3步沒有刪除結點,那麼我們就需要向左子樹進行遞迴刪除

如果第4步也沒有刪除結點,則應當向右子樹進行遞迴刪除

public

void

delnode

(int no)

// 3.如果當前結點的右子結點不為空,並且右子結點就是要刪除結點,就將this. right=null;並且就返回(結束遞迴刪除)if(

this

.right != null &&

this

.right.no == no)

// 4.如果第2和第3步沒有刪除結點,那麼我們就需要向左子樹進行遞迴刪除if(

this

.left != null)

// 5.如果第4步也沒有刪除結點,則應當向右子樹進行遞迴刪除if(

this

.right != null)

}

測試:

流程(以刪除5號節點為例):

首先,在樹類中,判斷根節點不是空的,並且根節點的編號1不是需要刪除的,所以進入heronode裡的遞迴刪除。

其次,進入節點類中的刪除方法。進入乙個判斷:根節點的左子節點不為空,且左子節點的編號2不是要找的編號5,退出本次判斷。

進入下乙個判斷,上面兩個操作都沒有刪除節點,且2號(根節點的左子節點)不為空,於是進入其左遞迴刪除。進入遞迴後,判斷2號的左子節點為空,又判斷2號的右子節點為空。所以本次遞迴,四個判斷條件乙個都沒滿足,退出根節點左子樹的遞迴刪除。

進入根節點右子樹的遞迴刪除。先判斷其左子節點不為空 且 左子節點的編號5就是要刪除的節點編號5,直接刪除(置空)該節點後,return.

二叉樹刪除結點

二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...

資料結構與演算法(十三)刪除二叉樹結點

刪除二叉樹結點 刪除結點是二叉樹操作中最複雜的。在刪除之前首先要查詢要刪除的結點。找到結點後,這個要刪除的結點可能會有三種情況需要考慮。1.該節點是葉子結點,沒有子結點 要刪除葉子結點,只需要改變該節點的父結點的引用值,將指向該節點的引用值設定為null就可以了。2.該節點有乙個子結點 改變父結點的...

資料結構筆記 樹 二叉樹 滿二叉樹

二叉樹滿二叉樹 樹是n n 0 個結點的有限集。結點為零的樹為空樹。任意一棵非空樹中 1.有且有乙個特定的稱為根的結點 2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每乙個集合又是一棵樹,並稱為根的子樹。1.結點擁有的子樹數稱為結點的度 2.度為0的結點稱為葉結點或分支結點,除根...