二叉排序樹-插入算法


 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct BTNode{  5     int key;  6     BTNode *lchild;  7     BTNode *rchild;  8 }BTNode;  9 
10 int BSTInsert(BTNode *&p,int key)//用返回值判斷插入是否成功
11 { 12     if(p==NULL) 13  { 14         p=(BTNode*)malloc(sizeof(BTNode)); 15         p->key=key; 16         p->lchild=p->rchild=NULL; 17         return 1;//成功插入
18  } 19     else
20  { 21         if(p->key==key) return 0;//已經存在相同值的結點,插入失敗
22         else
23  { 24             if(key < p->key) 25  { 26                 return BSTInsert(p->lchild,key);//去左子樹
27  } 28             if(key > p->key) 29  { 30                 return BSTInsert(p->rchild,key);//去右子樹
31  } 32  } 33  } 34 } 35 int BFS(BTNode*p,int maxSize) 36 { 37     int front,rear; 38     BTNode *que[maxSize];//采用循環隊列,損失一個存儲位置來實現隊空和隊滿不同的判定條件
39     front=rear=0; 40     BTNode *q; 41     if(p)//一般默認p是存在的,這里以防萬一
42  { 43         rear=(rear+1)%maxSize; 44         que[rear]=p;//根結點入隊
45         while(front!=rear)//循環隊列隊不空的條件(隊滿條件是(rear+1)%maxSize==front)(或者(front-1+maxSize)%maxSize==rear)
46  { 47             front=(front+1)%maxSize; 48             q=que[front];//從“前面”出隊
49             printf("%d\t", q->key); 50             if(q->lchild) 51  { 52                 rear=(rear+1)%maxSize; 53                 que[rear]=q->lchild;//左孩子非空,入隊
54  } 55             if(q->rchild) 56  { 57                 rear=(rear+1)%maxSize; 58                 que[rear]=q->rchild;//右孩子非空,入隊 
59  } 60  } 61  } 62 } 63 void inorder(BTNode*p) 64 { 65     if(p) 66  { 67         inorder(p->lchild); 68         printf("%d\t", p->key); 69         inorder(p->rchild); 70  } 71 } 72 int main(int argc, char const *argv[]) 73 { 74     int a[]={9,7,8,6,5,3,4,2,1,1,1};//有重復節點
75     int len=sizeof(a)/sizeof(int); 76     BTNode *root=NULL; 77     for(int i=0;i<len;i++)//不斷地插入結點建成一棵二叉排序樹
78  { 79  BSTInsert(root,a[i]); 80  } 81     // BFS(root,len);//層次遍歷方式
82     inorder(root);//中序遍歷方式,正好配合二叉排序樹,將其順序打印出來
83     return 0; 84 }

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM