您的位置:

c语言排序树,c++排序库函数

本文目录一览:

c语言 二叉排序树 100分

#include stdio.h #include stdlib.h typedef struct _BiTNode { int val; struct _BiTNode* lhs; struct _BiTNode* rhs; }BiTNode; //建立二叉排序树 void inserttree(BiTNode** Tree, int val) //插入函数 { BiTNode* t, *p, *n; t = (BiTNode*)malloc(sizeof(BiTNode)); t-val = val; t-lhs = t-rhs = NULL; p = NULL, n = *Tree; while(n) { p = n; n = val n-val ? n-lhs : n-rhs; } (p ? val p-val ? p-lhs : p-rhs : *Tree) = t; } void buildBST(BiTNode** Tree) { int val; char c; *Tree = NULL; while(1) { scanf("%d", val); inserttree(Tree, val); if((c = getchar()) == '\n') break; else ungetc(c, stdin); } } //二叉排序树查找 BiTNode* search(BiTNode* Tree, int val) { while(Tree) { if(val Tree-val) Tree = Tree-lhs; else if(val Tree-val) Tree = Tree-rhs; else return Tree; } return NULL; } //二叉排序树删除 void del(BiTNode* Tree) { if(Tree) { del(Tree-lhs); del(Tree-rhs); free(Tree); } } int main() { return 0; }

用C语言实现二叉排序树的查找、插入和删除

#includestdio.h

//二分查找法或折半查找法

void main(){

int a[10]={1,3,5,9,13,16,17,26,38},count=0;//记录查找了多少次

//必须是有次的数组

int key,mid;//要查找的数字和折半后的下标

int pos=-1;//查找到的位置

int i=0,j=8;

printf("请输入要查找的数据:");

scanf("%d",key);

while(i=j){

count++;

mid=(i+j)/2;

if(key==a[mid]){

pos=mid+1;

break;

}

if(keya[mid])i=mid+1;

else j=mid-1;

}

if(pos==-1)

printf("对不起,没有找到你想要的数据!\n");

else

printf("该数据位于数组的第%d位\n共查找了%d次\n",pos,count);

}

删除

#includestdio.h

void main(){

int i,a[10]={1,3,4,5,7};

//下面看如何删除数组元素

//其实跟插入数据相反的道理

//比如删除a[1]这个元素,我们可以通过移动依次覆盖相应的位置

/*a[1]=a[2];

a[2]=a[3];

a[3]=a[4];*/

//这时候a[1]就已经被删除了

//把这段写成循环

for(i=1;i=3;++i)

a[i] = a[i+1];

for(i=0;i4;++i)

printf("%d ",a[i]);

}

C语言2叉排序树的问题,急

struct tree

{

int num;

struct tree *left;

struct tree *right;

};

int a[10]={4,9,0,1,8,6,3,5,2,7}

main()

{

int i,j,k;

struct tree *head,*p1,*p2,*p3;

p1-num=a[0];

p1-left=null;

p1-right=null;

head=p1;

for(i=0;i10;i++)

{

p2-num=a[0];

p2-left=null;

p2-right=null;

p1=head;

while(1)

{

p3=p1

if(p2-num=p1-num) p1=p1-right;

else p1=p1-left;

if(p1==null)

{

p3-left=p2;

breal;

}

}

}

//以上为建立树

inorder(head);

//编历

}

void inorder(struct tree *p)

{

if(p!=null)

{

inorder(p-left);

printf("%d",p-num);

inorder(p-right);

}

return;

}

本程序未经过调试,大体思路应该无误!

二叉排序树的实现(c语言)

/*二叉树的基本运算与实现*/

#include stdio.h

#include malloc.h

#define MAXNODE 256

typedef int datatype;

typedef struct BiTNode

{

datatype data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

typedef struct

{

BiTree link;

int flag;

}stacktype;void menu();

int Initiate(BiTree *bt,datatype x);

BiTree InsertL(BiTree bt,datatype x,BiTree parent);

BiTree InsertR(BiTree bt,datatype x,BiTree parent);

BiTree DeleteL(BiTree bt,BiTree parent);

BiTree DeleteR(BiTree bt,BiTree parent);

void PreOrder(BiTree bt);

void InOrder(BiTree bt);

void PostOrder(BiTree bt);

void LevelOrder(BiTree bt);

BiTree Find(BiTree parent,datatype a);

void NRPreOrder(BiTree bt);

void NRInOrder(BiTree bt);

void NRPostOrder(BiTree bt);void main()

{

int n,m=1;

BiTree t; /*clrscr();*/

while(m)

{

menu();

scanf("%d",n);

switch(n)

{

case 1:{/*初始化*/

int flag;

datatype x;

printf("please input head point x:\n");

scanf("%d",x);

flag=Initiate(t,x);

if(flag==1)

printf("\nInitiate success!");

else

printf("\nInitiate fail!");

break;

}

case 2:{/*建树*/

break;

}

case 3:{/*插入结点x作为a的左孩子*/

datatype a,x;/*x作为a的左孩子*/

BiTree parent=t;

printf("please input a and x:\n");

scanf("%d%d",a,x);

parent=Find(parent,a);

parent=InsertL(t,x,parent);

if(parent!=NULL)

t=parent;

break;

}

case 4:{/*插入结点x作为a的右孩子*/

datatype a,x;/*x作为a的右孩子*/

BiTree parent=t;

printf("please input a and x:\n");

scanf("%d%d",a,x);

parent=Find(parent,a);

parent=InsertR(t,x,parent);

if(parent!=NULL)

t=parent;

break;

}

case 5:{/*删除结点a的左孩子*/

datatype a;

BiTree parent=t;

printf("please input a:\n");

scanf("%d",a);

parent=Find(parent,a);

parent=DeleteL(t,parent);

if(parent!=NULL)

t=parent;

break;

}

case 6:{/*删除结点a的左孩子*/

datatype a;

BiTree parent=t;

printf("please input a:\n");

scanf("%d",a);

parent=Find(parent,a);

parent=DeleteR(t,parent);

if(parent!=NULL)

t=parent;

break;

}

case 7:{/*递归先序遍历*/

PreOrder(t);

break;

}

case 8:{/*递归中序遍历*/

InOrder(t);

break;

}

case 9:{/*递归后序遍历*/

PostOrder(t);

break;

}

case 10:{/*层次遍历*/

LevelOrder(t);

break;

}

case 11:{/*先序遍历的非递归实现*/

NRPreOrder(t);

break;

}

case 12:{/*中序遍历的非递归实现*/

NRInOrder(t);

break;

}

case 13:{/*后序遍历的非递归实现*/

NRPostOrder(t);

break;

}

case 0:m=0;

}

}

}

void menu()

{

/*clrscr();*/

printf("\n");

printf("\t\t1.initiate\n\n");

printf("\t\t2.create thread\n\n");

printf("\t\t3.insert Left\n\n");

printf("\t\t4.insert Right\n\n");

printf("\t\t5.delete Left\n\n");

printf("\t\t6.delete Right\n\n");

printf("\t\t7.preorder\n\n");

printf("\t\t8.inorder\n\n");

printf("\t\t9.postorder\n\n");

printf("\t\t10.levelorder\n\n");

printf("\t\t11.nrpreorder\n\n");

printf("\t\t12.nrinorder\n\n");

printf("\t\t13.nrpostorder\n\n");

printf("\t\t0.exit\n\n");

printf("\n\n\n\tplease select:");

}

int Initiate(BiTree *bt,datatype x)

{

if((*bt=(BiTNode*)malloc(sizeof(BiTNode)))==NULL)

return 0;

(*bt)-data=x;

(*bt)-lchild=NULL;

(*bt)-rchild=NULL;

return 1;

}

BiTree InsertL(BiTree bt,datatype x,BiTree parent)

{

BiTree p;

if(parent==NULL)

{

printf("\nerror!\n");

return NULL;

}

if((p=(BiTNode*)malloc(sizeof(BiTNode)))==NULL)

return NULL;

p-data=x;

p-lchild=NULL;

p-rchild=NULL;

if(parent-lchild==NULL)

parent-lchild=p;

else

{

p-lchild=parent-lchild;

parent-lchild=p;

}

return bt;

}

BiTree InsertR(BiTree bt,datatype x,BiTree parent)

{

BiTree p;

if(parent==NULL)

{

printf("\nerror!\n");

return NULL;

}

if((p=(BiTNode*)malloc(sizeof(BiTNode)))==NULL)

return NULL;

p-data=x;

p-lchild=NULL;

p-rchild=NULL;

if(parent-rchild==NULL)

parent-rchild=p;

else

{

p-rchild=parent-rchild;

parent-rchild=p;

}

return bt;

}

BiTree DeleteL(BiTree bt,BiTree parent)

{

BiTree p;

if(parent==NULL||parent-lchild==NULL)

{

printf("\ndelete error!");

return NULL;

}

p=parent-lchild;

parent-lchild=NULL;

free(p);

return bt;

}

BiTree DeleteR(BiTree bt,BiTree parent)

{

BiTree p;

if(parent==NULL||parent-rchild==NULL)

{

printf("\ndelete error!");

return NULL;

}

p=parent-rchild;

parent-rchild=NULL;

free(p);

return bt;

}

void PreOrder(BiTree bt)

{

if(bt==NULL)

return;

printf("%5d",bt-data);

PreOrder(bt-lchild);

PreOrder(bt-rchild);

}

void InOrder(BiTree bt)

{

if(bt==NULL)

return;

InOrder(bt-lchild);

printf("%5d",bt-data);

InOrder(bt-rchild);

}

void PostOrder(BiTree bt)

{

if(bt==NULL)

return;

PostOrder(bt-lchild);

PostOrder(bt-rchild);

printf("%5d",bt-data);

}

void LevelOrder(BiTree bt)

{

BiTree Queue[MAXNODE];

int front,rear;

if(bt==NULL)

{

return;

}

front = -1;

rear = 0;

Queue[rear] = bt;

while(front!=rear)

{

front++;

printf("%5d",Queue[front]-data);

if(Queue[front]-lchild!=NULL)

{

rear++;

Queue[rear]=Queue[front]-lchild;

}

if(Queue[front]-rchild!=NULL)

{

rear++;

Queue[rear]=Queue[front]-rchild;

}

}//end while

}

BiTree Find(BiTree parent,datatype a)

{

BiTree p;

if(parent==NULL)

p=NULL;

else if(parent-data==a)

p=parent;

else

{

p=Find(parent-lchild,a);

if(p==NULL)

p=Find(parent-rchild,a);

}

return p;

}

void NRPreOrder(BiTree bt)

{

BiTree stack[MAXNODE],p;

int top;

if(bt==NULL)

{

printf("Tree is empty!\n");

return;

}

top=-1;

p=bt;

while((p!=NULL)||(top!=-1))

{

while(p!=NULL)

{

printf("%5d",p-data);

if(top==MAXNODE-1)

{

printf("Stack overflow!\n");

return;

} /* end if */

else

{

top++;

stack[top]=p;

} /* end if-else */

p=p-lchild;

} /* end while p */

p=stack[top];

top--;

p=p-rchild;

} /* end while p top */

}

void NRInOrder(BiTree bt)

{

BiTree stack[MAXNODE],p;

int top;

if(bt==NULL)

{

printf("Tree is empty!\n");

return;

}

top=-1;

p=bt;

while((p!=NULL)||(top!=-1))

{

while(p!=NULL)

{

if(top==MAXNODE-1)

{

printf("Stack overflow!\n");

return;

} /* end if */

else

{

top++;

stack[top]=p;

} /* end if-else */

p=p-lchild;

} /* end while p */

p=stack[top];

top--;

printf("%5d",p-data);

p=p-rchild;

} /* end while p top */

}

void NRPostOrder(BiTree bt)

{

stacktype stack[MAXNODE];

BiTree p;

int top,sign;

if(bt==NULL)

{

printf("Tree is empty!\n");

return;

}

top=-1;

p=bt;

while((p!=NULL)||(top!=-1))

{

if(p!=NULL) /*结点第一次入栈*/

{

top++;

stack[top].link=p;

stack[top].flag=1; /*标记第一次入栈*/

p=p-lchild;

} /* end if */

else

{

p=stack[top].link;

sign=stack[top].flag;

top--;

if(sign==1) /*结点第二次入栈*/

{

top++;

stack[top].link=p;

stack[top].flag=2; /*标记第二次入栈*/

p=p-rchild;

} /* end if */

else

{

printf("%5d",p-data);

p=NULL;

} /* end if-else */

} /* end if-else */

} /* end while */

}

C语言实现:二叉排序树结点的删除

else

if((*t)-lchild==NULL)

(*t)=(*t)-rchild;

else

if((*t)-rchild==NULL)

(*t)=(*t)-lchild;

你确定你这个没有写错???左右孩子节点,都为空了你怎么还进入想进入进去?【估计你是这样想的】。。。但是安装你这个代码,只要左(右)孩子节点为空,你就直接把这个节点该删了,能不出错?【把一个空的孩子节点指向该节点】

C语言 关于二叉树排序树的建立及中序遍历程序的调试

看这个吧,跟你的设计一摸一样,有注释,你的没有注释,有些不怎么好理解。

#include

stdio.h

#include

stdlib.h

struct

tree//声明树的结构

{

struct

tree

*left,*right;

int

data;

};

typedef

struct

tree

treenode;//声明新类型树结构

typedef

treenode

*b_tree;//声明二叉树链表

//插入二叉树节点

b_tree

insert_node(b_tree

root,

int

node)

{

b_tree

newnode

;//声明树根指针

b_tree

currentnode;//声明目前节点指针

b_tree

parentnode;//声明父节点指针

//申请新节点的内存空间

newnode=(b_tree)malloc(sizeof(treenode));

newnode-data=node;//存入节点内容

newnode-right=NULL;//初始化右指针

newnode-left=NULL;

if(root==NULL)return

newnode;

else

{

currentnode=root;//存储目前节点指针

while(currentnode!=NULL)

{

parentnode=currentnode;//存储父节点指针

if(currentnode-datanode)//比较节点的数值大小

currentnode=currentnode-left;//左子树

else

currentnode=currentnode-right;//右子树

}

if(parentnode-datanode)//将父节点和子节点做链接

parentnode-left=newnode;//子节点为父节点的左子树

else

parentnode-right=newnode;//子节点为父节点的右子树

}

return

root;//返回根节点的指针

}

//建立二叉树

b_tree

create_btree(int

*data,int

len)

{

b_tree

root=NULL;

for(int

i=0;ilen;i++)

root=insert_node(root,data[i]);

return

root;

}

//二叉树中序遍历

void

in_order(b_tree

point)

{

if(point!=NULL)//遍历的终止条件

{

in_order(point-left);//遍历左子树

coutpoint-data"

";//打印节点的内容

in_order(point-right);//遍历右子树

}

}

//主程序

void

main()

{

b_tree

root=NULL;//树根指针

int

value;//暂存读入将要遍历的数值

int

nodelist[20];

int

index=0;

printf("请输入将要参与遍历的数值:\n");

//读数值到数组中,

//这是一种不知道数组元素到底有几个的情况下的输入方法

scanf("%d",value);

while(value!=0)

{

nodelist[index]=value;

index++;

scanf("%d",value);

}

//建立二叉树

root=create_btree(nodelist,index);

//中序遍历

printf("中序遍历二叉树结果如下\n");

in_order(root);

printf("\n");

}

/*

输入:6

3

1

9

5

7

4

8

0(退出)

结果:1

3

4

5

6

7

8

9

*/