C语言实现二叉树

#include "stdio.h"
#include "stdlib.h"

/*树节点*/
typedef struct node{
    int data;
    struct node * left; /*节点左边的树枝*/
    struct node * right;/*节点右边的树枝*/
}Node;

/*树根*/
typedef struct tree{
    Node * root;
}Tree;

/*插入函数 向一个树里面插入数据*/
void insert(Tree* tree, int value)
{
    /*创建一个节点*/
    Node* node=(Node*)malloc(sizeof(Node));
    node->data = value;
    node->left = NULL;
    node->right = NULL;
    
    /*判断树是不是空树*/
    if (tree->root == NULL)
    {
        tree->root = node;
    }
    else /*不是空树*/
    {
        Node* temp = tree->root;/*从树根开始*/
        while (temp != NULL)
        {
            if(value < temp->data)/*小于就进左儿子*/
            {
                if(temp->left == NULL)
                {
                    temp->left = node;
                    return;
                }
                else /*继续判断*/
                {
                    temp = temp->left;
                }
            }
            else /*否则进右儿子*/
            {
 
                if(temp->right == NULL)
                {
                    temp->right = node;
                    return;
                }
                else /*继续判断*/
                {
                    temp = temp->right;
                }
            }
        }
    }
}

/*
 遍历一整颗树
 中序遍历:先左后根再右
 */
void traverse(Node* node)
{
    if(node != NULL)
    {
        traverse(node->left);
        printf("%d ",node->data);
        traverse(node->right);
    }
}

/*销毁一棵树*/
void distory_tree(Node* node)
{
    
    if(node != NULL)
    {
        distory_tree(node->left);
        distory_tree(node->right);
        printf("free node:%d\n",node->data);
        free(node);
        node = NULL;
    }
}

/*主函数*/
int main()
{
    int i = 0;
    Tree tree;
    tree.root = NULL;/*创建一个空树*/
    int n;
    printf("input total num:\n");
    /*输入n个数并创建这个树*/
    scanf("%d",&n);
    for(i = 0; i < n; i++)
    {
        int temp;
        scanf("%d",&temp);
        insert(&tree, temp);
    }
    /*遍历整个树*/
    traverse(tree.root);
    
    /*销毁一棵树*/
    distory_tree(tree.root);
    return 0;
}

 

posted @ 2021-05-16 09:48  cheshulin  阅读(343)  评论(0编辑  收藏  举报