二叉树的初始化,以及遍历
参考以下链接:博主:
https://www.baidu.com/link?url=chlFiQeDE-5yQno8EmpElsiryXEv8QgQd8_21E4UIYbq-g7WH_vKmyNKFPiHXtd4SZa_WZwzeT1WGLK_W_7-cK&wd=&eqid=8288c77500015031000000035b2b66a7
下面是我参考上面的理解:
#include
#include
struct binary_tree { //定义结构体
int data ; // Data area
struct binary_tree * left;
struct binary_tree * right;
};
typedef struct binary_tree node; //定义结点
void insert(node ** tree, int val) { //插入数据
node * temp = NULL;//临时变量
if(!(*tree)) {// 树节点是否存在
temp = (node *)malloc(sizeof(node));//申请空间
temp->left = temp->right = NULL;
temp->data = val;
*tree = temp;//每次从根结点开始,
return ;
}
if (val < (*tree)->data) {
insert(&(*tree)->left,val);
}else if (val > (*tree)->data) {
insert(&(*tree)->right,val);
}
}
void deltree(node * tree) {
if(tree) {
deltree(tree->left);
deltree(tree->right);
free(tree);
}
}
void print_preorder(node * tree) {
if(tree) {
printf("%d\n",tree->data);
print_preorder(tree->left);
print_preorder(tree->right);
}
}
void print_inorder(node * tree) {
if(tree) {
print_inorder(tree->left);
printf("%d\n",tree->data);
print_inorder(tree->right);
}
}
void print_postorder(node * tree) {
if(tree) {
print_postorder(tree->left);
print_postorder(tree->right);
printf("%d\n",tree->data);
}
}
int main(void)
{
node * root;
node * tmp;
//int i;
root = NULL;
insert(&root,9);
insert(&root,4);
insert(&root,15);
insert(&root,6);
insert(&root,12);
insert(&root,17);
insert(&root,2);
printf("Pre Order Display\n");
print_preorder(root);
printf("In Order Display\n");
print_inorder(root);
printf("Post Order Display\n");
print_postorder(root);
deltree(root);
}