二叉排序树的建立和遍历(递归实现)

来源:互联网 发布:淘宝卖家聊天术语 编辑:程序博客网 时间:2024/05/21 14:43
#include <stdio.h>#include <stdlib.h>typedef struct node node;struct node{    int data;    node *pleft;    node *pright;};node* creat_node(int value);//创建节点void add_node(int value,node *pnode);//增加节点void list_nodes(node *pnode);//输出数据void free_nodes(node *pnode);//释放内存int main(){    int n;    node *proot = NULL;    while(~scanf("%d",&n))    {        if(!proot)            proot = creat_node(n);        else            add_node(n,proot);    }    list_nodes(proot);    free_nodes(proot);    return 0;}node *creat_node(int value){    node *temp = (node*)malloc(sizeof(node));    temp->data = value;    temp->pleft = temp->pright = NULL;    return temp;}void add_node(int value,node *pnode){    if(value < pnode->data)        if(!pnode->pleft)            pnode->pleft = creat_node(value);        else            add_node(value,pnode->pleft);    else        if(!pnode->pright)            pnode->pright = creat_node(value);        else            add_node(value,pnode->pright);}void list_nodes(node *pnode){    if(pnode->pleft)        list_nodes(pnode->pleft);    printf("%d ",pnode->data);    if(pnode->pright)        list_nodes(pnode->pright);}void free_nodes(node *pnode){    if(!pnode)        return;    if(pnode->pleft)        free_nodes(pnode->pleft);    if(pnode->pright)        free_nodes(pnode->pright);    free(pnode);}

1 0