随手写了一个鸡肋的二叉树
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; }
以上