1. 先搜尋bst樹,找到待刪除的節點
2. 判斷刪除節點是否有兩個孩子,如果有,用前驅的值代替,直接刪除前驅
3. 刪除有乙個孩子的節點,或者沒有孩子的節點(看作有乙個孩子,孩子是null)
/** * 非遞迴實現bst樹的刪除操作
* @param data
*/public void non_remove(t data)
// 1. 先搜尋bst樹,找到待刪除的節點
bstnodecur = this.root;
bstnodeparent = null;
while(cur != null) else if(cur.getdata().compareto(data) < 0) else
}if(cur == null)
// 2. 判斷刪除節點是否有兩個孩子,如果有,用前驅的值代替,直接刪除前驅
if(cur.getleft() != null && cur.getright() != null)
old.setdata(cur.getdata()); // 前驅節點的值代替待刪節點的值
}// 3. 刪除有乙個孩子的節點,或者沒有孩子的節點(看作有乙個孩子,孩子是null)
bstnodechild = cur.getleft();
if(child == null)
if(parent == null) else else
}}
BST樹的基本實現
基本操作 建立,銷毀,清空,增刪改查,先中後層遍歷。都很簡單,就是刪除乙個節點要分類討論。在乙個二叉搜尋樹中,乙個基本性質,左子樹的所有節點小於根節點,右子樹的所有節點大於等於根節點,依據這個性質討論刪除操作。當被刪除元素左子樹為空 右子樹為空,或者都為空,直接用左子樹或者右子樹替代。如刪除15,設...
樹的非遞迴
code 資料結構.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std typedef char elemtype typedef struct lnode lnode,linkstack 棧 typedef struct b...
樹的遍歷遞迴非遞迴
1先序 遞迴 class solution public void b list list,treenode tree 非遞迴 class solution else return list 2中序 遞迴 class solution public void b list list,treenode...