#include <stdio.h>
#include <stdlib.h>
struct tree{
struct tree *left;
struct tree *right;
int data;
};
typedef struct tree treenode;
typedef treenode* b_tree;
b_tree insert_node(b_tree root, int node); //插入二叉树的节点
b_tree create_btree(int *data, int len); //建立二叉树
void print_tree(b_tree root); //打印二叉树
int main(){
b_tree root;
int i, index;
int value;
int nodelist[20];
printf_s("\n Please input the elements of binary tree(Exit for 0): \n");
index =0 ;
//读取数值到数组中
scanf_s("%d", &value);
while(value != 0){
nodelist[index] = value;
index ++;
scanf_s("%d", &value);
}
for(i=0; i<index; i++)
printf_s("%d ", nodelist[i]);
//建立二叉树
root = create_btree(nodelist, index);
//打印二叉树节点内容
print_tree(root);
return 0;
}
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->left = NULL; //设置左指针初值
newnode->right = 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->right = newnode;
else
parentnode->left = newnode;
}
return root;
}
b_tree create_btree(int *data, int len){
b_tree root = NULL; //树根节点指针
int i;
for(i=0; i<len; i++)
root = insert_node(root, data[i]);
return root;
}
void print_tree(b_tree root){
b_tree pointer;
pointer = root->left;
printf_s("\nPrint left_subtree node of root: \n");
while(pointer != NULL){
printf_s("[%2d]\n", pointer->data); //打印节点内容
pointer = pointer->left;
}
pointer = root->right;
printf_s("Print right_subtree node of root: \n");
while(pointer != NULL){
printf_s("[%2d]\n", pointer->data);
pointer = pointer->right;
}
}