非遞迴實現BST樹的刪除操作

2021-09-26 00:00:43 字數 739 閱讀 2684

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...