好长时间没碰这东西了,今天复习了一下。发现编程功力还是有点提升的,撸出来也没有花多少功夫,不过貌似有点鸡肋。。。。哈哈
#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;
}
以上