バイナリソートツリーの実装(部分)

バイナリソートツリーの実装(部分)

1. SearchBST(T、キー)およびInsertBST(T、キー)の疑似コードを記述します。

  1. SearchBST 疑似コード

    void SearchBST(T,key){
    	if(T为空||T==key) return T;
    	if(T>key)
    		SearchBST(T->lchild,key);
    	else 
    		SearchBST(T->rchild,key);
    }
    
  2. 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を順番に出力します

  1. 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);
    		}
    	}
    }
    
  2. BSTツリーを作成します。

    1. データ型定義:

      typedef struct BSTNode {
      	int data;
      	struct BSTNode* lchild, * rchild;
      }*BSTree;
      
    2. 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);
      }
      
    3. 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);
      }
      
    4. 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);
      		}
      	}
      }
      
    5. 順序トラバーサル:

      void InOrder(BSTree T) {
      	if (T != NULL) {
      		InOrder(T->lchild);
      		cout << T->data<<" ";
      		InOrder(T->rchild);
      	}
      }
      
    6. 主な機能:

      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の直接の前駆体または右サブツリーの右端のノードに置き換えます。

おすすめ

転載: www.cnblogs.com/hcy420/p/12728725.html