二叉排序树的构造与查找c语言,二叉排序树的查找(C语言)代码

#include

#include

int counter; /*计数器*/

struct tree /*声明书的结构*/

{struct tree *left;

int data;

struct tree *right;

};

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->data>node)

currentnode=currentnode->left;

else currentnode=currentnode->right;

}

if(parentnode->data>node)

parentnode->left=newnode;

else

parentnode->right=newnode;

}

return root; /*返回根结点的指针*/

}

b_tree create_btree(int *data, int len) /*建立二叉树*/

{

b_tree root=null;

int i;

for(i=0;i

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

return root;

}

void inorder(b_tree point)

{ /*中序遍历二叉树*/

if(point!=null)

{inorder(point->left);

printf("\n%d\n",point->data); /*处理结点内容*/

inorder(point->right);

}

}

int tree_search(b_tree root,int key) /*查找二叉树*/

{

b_tree pointer;

pointer=root;

counter=0;

while(pointer!=null)

{

counter++;

if(pointer->data

pointer=pointer->right;

else if(pointer->data>key)

pointer=pointer->left;

else if(pointer->data==key)

return 1;

}

return 0;

}

void main()

{

b_tree root=null;

int m,i,index; /*读入输入值所用的暂存变量*/

float max=0;

int nodelist[20]; /*声明存储输入数据之数组*/

int value;

printf("\nplease input the elements of binary tree(exit for 0):\n");

index=0;

scanf("%d",&value); /*读取输入值放到变量value*/

while(value!=0)

{nodelist[index]=value;

index=index+1;

scanf("%d",&value);

}

printf("%d",index);

root=create_btree(nodelist,index);

printf(" \n the inorder traversal result is :");

inorder(root);

printf("\n");

for(m=0;m

{

tree_search(root,nodelist[m]);

max+=counter; /*计算查找长度*/

}

printf("the average long is: %.2f\n",max/index); /*输出average查找长度*/

getch();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值