バイナリソートツリーの実装(部分)
1. SearchBST(T、キー)およびInsertBST(T、キー)の疑似コードを記述します。
-
SearchBST 疑似コード:
void SearchBST(T,key){ if(T为空||T==key) return T; if(T>key) SearchBST(T->lchild,key); else SearchBST(T->rchild,key); }
-
InsertBST 疑似コード:
void InsertBST(T,key){ if(T为空){ T=new Node; T=key; T->lchild=NULL; T->rchild=NULL; return 1; }else if(T==key) return 0; else if(T>key) InsertBST(T->lchild,key); else InsertBST(T->rchild,key); }
2. CreateBST(T)の疑似コードを記述して、コンソール入力からBSTツリーを作成します。最後にコードを使用して達成します。「50 30 80 20 40 90 10 25 35 85 23 88」を使用してBSTを作成し、BSTを順番に出力します
-
CreateBST 疑似コード:
void CreateBST(T){ T=new Node; T->lchild=NULL; T->rchild=NULL; //输入key if(T不空) T=key; while(key!=0){ //输入key if(T不空){ InsertBST(T,key); } } }
-
BSTツリーを作成します。
-
データ型定義:
typedef struct BSTNode { int data; struct BSTNode* lchild, * rchild; }*BSTree;
-
SearchBST関数:
BSTree SearchBST(BSTree T, int key) { if (T == NULL || T->data == key) return T; if (T->data > key) return SearchBST(T->lchild, key); else return SearchBST(T->rchild, key); }
-
InsertBST関数:
void InsertBST(BSTree T, int key) { if (T == NULL){ T = new BSTNode; T->data = key; T->lchild = NULL; T->rchild = NULL; return; } else if (T->data == key) return; else if (T->data > key) return InsertBST(T->lchild, key); else return InsertBST(T->rchild, key); }
-
CreateBST関数:
void CreateBST(BSTree T) { T = new BSTNode; T->lchild = NULL; T->rchild = NULL; int key; cin >> key; if (T != NULL) T->data = key; while (key != 0) { cin >> key; if (T != NULL) { InsertBST(T, key); } } }
-
順序トラバーサル:
void InOrder(BSTree T) { if (T != NULL) { InOrder(T->lchild); cout << T->data<<" "; InOrder(T->rchild); } }
-
主な機能:
void main() { BSTree T; T = new BSTNode; int key; CreateBST(T); cout << "中序遍历结果为:" << endl; InOrder(T); cin >> key; SearchBST(T, key); InsertBST(T, key); InOrder(T); }
-
3. DeleteBST(T、key)の疑似コードを記述して、Tからキーを削除します。
注意とポイントが必要な事項:
キーワードキーを削除するには、まずキーが配置されているノードの場所を特定する必要があります。①リーフノード②左または右のサブツリーノードのみ③ノードの左と右の両方のサブツリー
①リーフノード:キーを見つけた直後に削除します。
②左または右のサブツリーノードのみ:Tの親ノードのrchild / lchildをTのrchild / lchildにポイントし、左および右のサブツリーノードを上に移動します。
③左右両方のサブツリーのノード:TノードをTの直接の前駆体または右サブツリーの右端のノードに置き換えます。