スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

二分木(1)

2分木のサーチ

#include <stdio.h>
#include <stdlib.h>

typedef struct _tag_bnode{
struct _tag_bnode *left;
struct _tag_bnode *right;
int data;
}bnode;

bnode *tree_root = NULL;

bnode* create_new_node(int val){
bnode *new_node = (bnode*)malloc(sizeof(bnode));
new_node->left = NULL;
new_node->right = NULL;
new_node->data = val;

return new_node;
}

void insert_data(int val, bnode *node){
if(node == NULL){
tree_root = create_new_node(val);
return;
}
if(val < node->data ){
if(node->left != NULL)
insert_data(val, node->left);
else
node->left = create_new_node(val);
}else{
if(node->right != NULL)
insert_data(val, node->right);
else
node->right= create_new_node(val);
}
}

void print_tree(bnode *node){
while(node != NULL){
print_tree(node->left);
printf("%d\n", node->data);
print_tree(node->right);
return;
}
}

bnode* find_val(int val, bnode* node){
if(val < node->data){
if(node->left != NULL)
return find_val(val, node->left);
else
return NULL;
}else if( node->data < val){
if(node->right != NULL)
return find_val(val, node->right);
else
return NULL;
}

return node;
}

int main(void){
int command;
int data;
bnode *this_node;

while(1){
puts("### select menu ###");
puts("1:add 2:print 3:delete 4:quit 5:search");
puts("###################");
scanf("%d", &command);
switch(command){
case 1:
puts("input data");
scanf("%d", &data);
insert_data(data, tree_root);
break;
case 2:
print_tree(tree_root);
break;
case 3:
break;
case 4:
puts("end");
exit(EXIT_SUCCESS);
case 5:
puts("input data");
scanf("%d", &data);
this_node = find_val(data, tree_root);
if(this_node == NULL)
puts("that data doesn't exist");
else
puts("that data exists");
break;

default:
puts("command is invalid.");
exit(EXIT_FAILURE);
}
fflush(stdin);
}
return 0;
}
スポンサーサイト
プロフィール

tjnet777

Author:tjnet777
Solaris, VPNのサポート業務を1年

金融系SIerで業務アプリの開発、メンテを3年半

離職して大学院大学 1年生

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。