樹表尋找之二叉排序樹

來源:互聯網
上載者:User

首先介紹下基本概念:二叉排序樹是一棵二叉樹,或者為空白,或者滿足以下條件:

        ①若左子樹不空,則其上的值均小於根的值;

        ②若右子樹不空,其上的值均不小於根的值;

        ③左右子樹也是二叉排序樹

 

下面以基本的構造二叉排序樹和尋找其中的元素來說明其基本的演算法。

1、構造

       構造的基本思想:假設已存在一棵二叉排序樹,需要向其上添加元素。方法是建立一個指向node類型的

指標,將key裝入該指標指向的地區,然後遍曆二叉排序樹以尋找到合適的位置,將建立節點連結上。至於如

何尋找合適位置,則是根據二叉排序樹的特點,在左右子樹不斷尋找,直到找到一個合適的NULL位置。詳見

代碼。

2、尋找

       先比較根節點的關鍵字與待查元素的大小關係。如果相等,則表明尋找到,尋找結束;否則,如果前者大

於後者,則在左子樹中尋找;否則,在右子樹中尋找。

                  代碼如下:

#include<iostream>using namespace std;struct node   //節點包含一個關鍵字和左右兩個指向節點的指標{int key;node *lchild;node *rchild;};class bin_search_t  //二叉排序樹類{public:bin_search_t();void insert(node *&T,node *u);void create_bst(node *&T);node* visit(node *T,int value);node *root;};bin_search_t::bin_search_t(){root=NULL; //root為NULL決定了insert()和create_bst()都得用root的引用}void bin_search_t::insert(node *&T,node *u)  //將u指示的節點元素插入到以T為根的排序樹中{if(T==NULL)  //每次都是在空處連結T=u;else if(u->key>T->key)insert(T->rchild,u);elseinsert(T->lchild,u);}void bin_search_t::create_bst(node *&T)  //需要引用,因為下面有T=NULL語句,不引用就無法從root處訪問了{node *u=NULL;const int MAX=9999; //標誌構造結束int x;while(1)  {cin>>x;if(x==MAX) break;u=new node;  u->key=x;u->lchild=NULL;u->rchild=NULL;insert(T,u);}}/*遞迴尋找*/node* bin_search_t::visit(node *T,int value){if(T==NULL || T->key==value )  //把T==NULL放在前面會省去很多麻煩,因為當T==NULL時,T->key會出錯return T;else if(T->key>value)return visit(T->lchild,value);elsereturn visit(T->rchild,value);}/*非遞迴尋找node* bin_search_t_n::visit(node *T,int value){node *p=T;while(p!=NULL){if(p->key==value)return p;else if(p->key>value)p=p->lchild;elsep=p->rchild;}return p;}*/int main(){bin_search_t p;node *q;p.create_bst(p.root);q=p.visit(p.root,9);   //以尋找9為例    cout<<q<<endl;     //輸出9的位置if(q!=NULL)        //根據是否尋找的,輸出    cout<<q->key<<endl;elsecout<<"q==NULL"<<endl;return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.