二叉樹的節點刪除分為三種情況:
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的右...