構造二叉排序樹(BST) 二叉排序樹的刪除

2021-08-28 13:25:46 字數 1172 閱讀 1142

主要是刪除操作

#include #include using namespace std;

typedef int elementtype;

typedef struct treenode

}*threadtree;

void visit(treenode* node)

void inorder(threadtree root)

}// 非遞迴形式建立、插入bst

// 遞迴形式雖然較簡潔,但若二叉樹深度過大

// 遞迴棧建立過多,其效率就會很低

bool bst_insert(threadtree& root, int n = 0)

threadtree p = root, pre;

while( p )

// bst不存在相同的值

if( p && p->val == x ) continue;

if( x < pre->val )

pre->left = t;

else if( x > pre->val )

pre->right = t;

} return true;

}treenode* findfirst(threadtree root)

// 二叉排序樹的刪除

// 1. 刪除葉結點p,直接刪除

// 2. 結點p只有左子樹或右子樹,讓子樹替代該結點p

// 3. 結點p既有左子樹又有右子樹,以該結點p為根,查詢中序遍歷下第乙個結點t

// 使這個結點t替換結點p,再遞迴刪除這個結點t即可

bool node_delete(treenode*& p, const int& val)

// 只有左子樹

else if( p->left && !p->right )

// 只有右子樹

else if( !p->left && p->right )

// 左、右子樹均存在

else

} return true;

}// 注意這裡root需傳引用型別,因為可能刪除根結點也是可能的

bool bst_delete(threadtree& root, int val = 0)

int main( )

二叉排序樹BST

二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹的性質 左子樹上所有結點的值均小於或等於它的根結點的值 右子樹上所有結點的值均大於或等於它的根結點的值 左 右子樹也分別為二叉排序樹 如圖是乙個bst。有了這種性質,bst的...

二叉排序樹 BST

二叉排序樹,又叫二叉查詢樹,它或者是一棵空樹 或者是具有以下性質的二叉樹 1.若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2.若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3.它的左右子樹也分別為二叉排序樹。1.1 排序二叉樹之插入操作 已知乙個關鍵字值為key的結...

BST(二叉排序樹)

二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...