二叉排序树-插入算法


 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