C和指標 第十七章 二叉樹刪除節點

2022-04-16 13:59:21 字數 676 閱讀 9684

二叉樹的節點刪除分為三種情況:

1.刪除的節點沒有子節點,直接刪除即可

2. 刪除的節點有乙個子節點,直接用子節點替換既可以

3.刪除的節點有兩個子節點。

對於第三種情況,一般是不刪除這個節點,而是刪除左子樹中最大的值的節點,並用這個值替換原先應該被刪除的節點。左子樹的最大節點只可能有乙個或者沒有子節點,所以刪除很方便。

//刪除節點,返回指向修改過的節點的指標

tree_node* deletenode(tree_type value, tree_node *tree)

else if(tree -> value > value)else if(tree -> value < value)else if(tree -> leftptr && tree -> rightptr)elseelse if(tree -> rightptr == null)

free(temptree);

}return tree;

}

測試**:

#include #include "binarytree.h"

int main()

else

return 1;

}

執行:

12原本是5的父節點,刪除後,從12的左子樹中用最大左子樹值9替換12,然後刪除9,此時5的父節點變為9.

第十七章經典抽象資料結構二 樹(陣列實現)

二叉搜尋樹插入 可以首先要判斷樹是不是為空 針對鍊錶結構是必須的,因為要分配動態記憶體 然後插入。有2種選擇,遞迴和迴圈,因為遞迴是尾部遞迴,犧牲了空間複雜度獲得了可讀性,可以轉換為迴圈。刪除結點 分為3種情況 1 刪除沒有孩子的結點,直接刪除 2 刪除只有乙個孩子的結點,刪除原有結點,指向孩子結點...

二叉樹的節點刪除

刪除 int treedeletedata pnode proot,int data pnode pfind proot pnode pfather null pnode pdelete null 01找到資料為data的節點的位址以及父節點的位址 while pfind null else if ...

刪除二叉樹的節點

總體思想 分多種情況討論 1.被刪除節點沒有子樹的情況,直接刪除,並修改對應父節點的指標為空。2.對於只有乙個子樹的情況,考慮將其子樹作為其父節點的子樹,關於是左還是右,根據被刪除的節點確定。3.最複雜的是有兩個子數的情況,可以考慮兩種方法,都是同樣的思想 用被刪除節點a的左子樹的最右節點或者a的右...