基本操作:建立,銷毀,清空,增刪改查,先中後層遍歷。
都很簡單,就是刪除乙個節點要分類討論。
在乙個二叉搜尋樹中,乙個基本性質,左子樹的所有節點小於根節點,右子樹的所有節點大於等於根節點,依據這個性質討論刪除操作。
當被刪除元素左子樹為空、右子樹為空,或者都為空,直接用左子樹或者右子樹替代。如刪除15,設*root指向15這個節點
當左右子樹都不空是,找到右子樹的最小值k,更改root->data = k, 從右子樹刪除k,鍵值為k的節點左子樹肯定為空,滿足情況1.
node* p = root->rch;
while (p->lch)
root->data = p->data;
erase(root->rch, p->data) //遞迴
bst樹完整**如下
#include #include #include using namespace std;
typedef struct node
node;
void create(node** root)
void clean(node** root)
}void destory(node** root)
void insert(node **root, int value)
else
else
}}void input(node** root, int n)
}void pre_output(node *root)
}void post_output(node *root)
}void mid_output(node *root)
}void layer_output(node *root)
if (temp->rch)
}}node* find(node *root, int key)
else if (root->data > key)
else
}return null;
}void erase(node** root, int value)
else if ((*root)->rch == null)
else
(*root)->data = t->data;
erase(&((*root)->rch), t->data);}}
else if ((*root)->data > value)
else
}}int main()
bst樹的說明
中序遍歷 遞迴的方法 x 為指標 inorder tree walk x if x null inorder tree walk x.left print x.key inorder tree walk x.right 非遞迴的方法 將遞迴的實現進行翻譯 inorder tree walk x if...
BST樹的定義
二叉搜尋樹 bst樹 又叫二叉排序樹,二叉查詢樹。它或者是一棵空樹 或者是具有以下性質的二叉樹 1.每個結點都有乙個資料域,且所有節點的資料域互不相同 2.若它的左子樹不為空,則左子樹上的所有結點的值都小於根節點的值 3.若它的右子樹不為空,則右子樹上的所有節點的值都大於根節點的值 4.左子樹和右子...
BST樹的查詢
bst樹的查詢 1 查詢思想 首先將給定的k值與二叉排序樹的根結點的關鍵字進行比較 若相等 則查詢成功 給定的k值小於bst的根結點的關鍵字 繼續在該結點的左子樹上進行查詢 給定的k值大於bst的根結點的關鍵字 繼續在該結點的右子樹上進行查詢。2 演算法實現 遞迴演算法 bstnode bst se...