主要是刪除操作
#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 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...