基本数据结构:建立二叉树 和 二叉树的顺序遍历

/*二叉树*/
#include<stdio.h>
#include<stdlib.h>
struct Treenode{
    long data;
    int count;
    Treenode* pleft;
    Treenode* pright;  
};  //二叉树的内容:数据,数据个数,两个“枝丫”:Pleft和 pright 
Treenode* creat_node(long value)
{
    Treenode* pnode=(Treenode*)malloc(sizeof(Treenode));  //动态分配内存 
    pnode->data=value;
    pnode->count=1;
    pnode->pleft=pnode->pright=NULL;
    return pnode;
}//建立根节点 

Treenode*  add_node(long value,Treenode* Pnode)
{
    if(!Pnode)      {return creat_node(value);}  //如果没有根节点则创建根节点 
    if(value== Pnode->data)
    {
         ++Pnode->count;
         return Pnode;    //添加一个数据时,要从树根开始比较、添加数据 
    }
    if(value< Pnode->data) 
    {
        if(!Pnode->pleft)
        {
            Pnode->pleft=creat_node(value);
            return Pnode->pleft;
        }
        else
        return add_node(value,Pnode->pleft);  //通过递归,始终将较小数据添加到左节点 
    }
    else
    {
    if(!Pnode->pright)
      {
       Pnode->pright=creat_node(value);
       return Pnode->pright;    
      } 
      else
       return add_node(value,Pnode->pright);
    }

 } 

 void list_nodes(Treenode* Pnode)
 {

    if(Pnode->pleft)         //通过递归,顺序遍历二叉树 
    {list_nodes(Pnode->pleft);}
    printf("%d   %d   \n",Pnode->count,Pnode->data);
    if(Pnode->pright)
    {list_nodes(Pnode->pright);}
 }

 int main()
 {
    long newvalue;
    int n,a;
    scanf("%d",&n);
    scanf("%ld",&newvalue);
    Treenode* Proot=creat_node(newvalue);
    for(int i=1;i<n;i++)
    {
        scanf("%ld",&newvalue); 
        add_node(newvalue,Proot);
    }
   list_nodes(Proot);
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值