您的位置:首页 > 编程语言

随手写了一个鸡肋的二叉树

2015-09-12 20:56 309 查看
好长时间没碰这东西了,今天复习了一下。发现编程功力还是有点提升的,撸出来也没有花多少功夫,不过貌似有点鸡肋。。。。哈哈

#include <stdio.h>
#include <stdlib.h>
struct BinaryTree{
struct BinaryTree *left;
struct BinaryTree *right;
int data;
int count;
};
//create node
struct BinaryTree* createNode(int data){
struct BinaryTree *node=(struct BinaryTree*)malloc(sizeof(struct BinaryTree));  //alloc memory
//set the node
node->left=NULL;
node->right=NULL;
node->data=data;
node->count=1;

return node;   //return
}
//insert node
void insertNode(struct BinaryTree *node,int data){
if(data==node->data){
printf("same haha\n");
node->count++;
return;
}
//go left
if(data<node->data){
//if left==NULL
if(node->left==NULL){
node->left=createNode(data);  //create a new node
return;
}
else
insertNode(node->left,data);
}
//go right
if(data>node->data){
if(node->right==NULL){  //if the right node is NULL
node->right=createNode(data);
return;
}
else
insertNode(node->right,data);  //go on
}
}
//delete node
void deleteNode(struct BinaryTree *node){
if(node->left!=NULL)
deleteNode(node->left);

if(node->right!=NULL)
deleteNode(node->right);
free(node);
node=NULL;
}
//preorder traversal
void first_scan(struct BinaryTree *node){
if(node->count==1)
printf("%d ",node->data);
else
for(int i=0;i<node->count;i++)
printf("%d ",node->data);
if(node->left!=NULL)
first_scan(node->left);

if(node->right!=NULL)
first_scan(node->right);
}
//inorder traversal
void inorder_scan(struct BinaryTree *node){
if(node->left!=NULL)
inorder_scan(node->left);
if(node->count==1)
printf("%d ",node->data);
else
for(int i=0;i<node->count;i++)
printf("%d ",node->data);
if(node->right!=NULL)
inorder_scan(node->right);
}
//postorder traversal
void postorder_scan(struct BinaryTree *node){
if(node->left!=NULL)
inorder_scan(node->left);

if(node->right)
inorder_scan(node->right);

if(node->count==1)
printf("%d ",node->data);
else
for(int i=0;i<node->count;i++)
printf("%d ",node->data);
}

int main(int argc,char **argv){
struct BinaryTree *root=NULL; //root node
int num=65533;
while((scanf("%d",&num))!=EOF){
if(root==NULL)   //if the root node is null
root=createNode(num);
else
insertNode(root,num);
}
//inorder traversal
printf("\n---------------inorder traversal-----------------\n");
inorder_scan(root);
//postorder traversal
printf("\n---------------postorder traversal-------------------\n");
postorder_scan(root);
printf("\n---------------preorder traversal-------------------\n");
first_scan(root);
//free the memory
deleteNode(root);
return 0;
}


以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 编程