#include <stdio.h>
#include <malloc.h>
//排序二叉树
typedef struct node {
int num;
node* left;
node* right;
} NODE;
//创建节点
NODE* create_node(int num) {
NODE* n = (NODE*) malloc(sizeof(NODE));
n->num = num;
n->left = NULL;
n->right = NULL;
return n;
}
void insert(NODE* root, NODE* node) {
NODE* p = root;
NODE* parent; //保存双亲结点指针
while (p != NULL) {
parent = p;
if (node->num > p->num) {
p = p->right;
} else if (node->num < p->num) {
p = p->left;
} else {
printf("已存在该元素!\n");
return;
}
}
if (node->num > parent->num) {
parent->right = node;
} else {
parent->left = node;
}
}
void search(NODE* root, int key) {
NODE* p = root;
while (p != NULL) {
if (key > p->num) {
p = p->right;
} else if (key < p->num) {
p = p->left;
} else {
printf("已找到\n");
return;
}
}
printf("不存在该元素!");
}
void print_tree(NODE* p) {
if (p == NULL) {
return;
}
printf("%d ", p->num); //前序遍历
print_tree(p->left);
print_tree(p->right);
//print_tree(p->left);
//printf("%d ", p->num); //中序遍历
//print_tree(p->right);
//print_tree(p->left);
//print_tree(p->right);
//printf("%d ", p->num); //后序遍历
}
int main() {
NODE* root = create_node(0);
int i;
for (i = 1; i < 10; i++) {
insert(root, create_node(i));
}
print_tree(root);
printf("\n");
search(root, 3);
return 0;
}