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

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

#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;
}

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值