| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:网上一边参考一边写的二叉树
只看楼主 加入收藏
wsdyi100
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
网上一边参考一边写的二叉树
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define OK 1
#define ERROR 0

typedef struct Node
{
    struct Node *lc;
    struct Node *rc;
    int data;
}BiNode,*BiTree;


/*Init a null bitree*/
BiTree InitBiTree(BiNode *node)
{
    BiTree tree = node;
    return tree;
}

/*make node*/
BiTree MakeNode(int temp,BiNode *left,BiNode *right)
{
    BiTree p = (BiTree)malloc((sizeof(BiNode)));
    if(p)
    {
        p->data = temp;
        p->lc   = left;
        p->rc   = right;
    }   
    return p;
}

/*free Node*/
unsigned char FreeNode(BiTree p)
{
    if(p)
    {
        free(p);
        return OK;
    }
    return ERROR;
        
}

/*clear a BiTree*/
void ClearBiTree(BiTree tree)
{
    BiTree p = tree;

    if(p->lc != NULL)
        ClearBiTree(p->lc);

    if(p->rc != NULL)
        ClearBiTree(p->rc);
    free(p);
}

/*Judge Tree NULL?*/
unsigned char StaictionTree(BiTree tree)
{
    if(tree)
        return OK;   
    else
        return ERROR;
}

/*is leaf node*/
unsigned char IsLeafNode(BiTree node)
{
    if(node->lc == NULL && node->rc == NULL)
        return OK;
    else
        return ERROR;
}

/*Get the Tree Depth*/
unsigned char GetDepth(BiTree node)
{
    unsigned char l=0,r=0,max=0;

    BiTree p = node;

    if(p)
    {
        l = GetDepth(p->lc);
        r = GetDepth(p->rc);
        max = (l > r ? l : r);
        return max+1;
    }
    else
        return 0;
}

/*Get Node Data*/
int GetNodeData(BiTree node)
{
    if(node)
    {
        return node->data;
    }
    return ERROR;

}

/*set node data*/
unsigned char SetNodeData(int a,BiTree node)
{
    if(node)
    {
        node->data = a;
        node->lc = NULL;
        node->rc = NULL;
        return OK;
    }
    return ERROR;
}

/*Set LeftChard and Right Chaild*/
unsigned char SetLeftChild(BiTree node,BiTree l)
{
    if(node && l)
    {
        node -> lc = l;   
        return OK;
    }
    return ERROR;
}

unsigned char SetRightChild(BiTree node,BiTree r)
{
    if(node && r)
    {
        node -> rc = r;
        return OK;
    }
    return ERROR;
}
/*Set LeftChard and Right Chaild*/


/*Insert child,attention the next 2 level*/
BiTree InsertChild(BiTree parent,BiTree child,char location)
{
    BiTree node;
    if(parent && child)
    {
        if(IsLeafNode(parent))
        {
            if(location == 0)
            {
                parent -> lc = child;
                return child;
            }else
            {
                parent -> rc = child;
                return child;
            }
        }else
        {
            if(location == 0)
            {
                node  = parent -> lc;
                parent -> lc = child;
                child -> lc = node;
                return child->lc;
            }else
            {
                node = parent -> rc;
                parent -> rc = child;
                child -> rc = node;
                return child->rc;
            }
        }
    }
    return parent;
}

/*delete leaf node*/
unsigned char DeleteNode(BiTree node,char loc)
{
    if(!IsLeafNode(node))
    {
        if(loc == 0)
            free(node->lc);
        else
            free(node->rc);
        return OK;
    }
    return ERROR;
}

/*printf the node number*/
void visit(int num)
{
    printf(" -%d- ",num);
}

/* Mid Left Right*/
void PreOrderTravel(BiTree node)
{
    BiTree p = node;
    if(p)
    {
        visit(p->data);
        PreOrderTravel(p->lc);
        PreOrderTravel(p->rc);
    }
}

/*Left Mid Right*/
void MidTravel(BiTree node)
{
    if(node)
    {
        MidTravel(node->lc);
        visit(node->data);
        MidTravel(node->rc);
    }
}

/*Left Mid Right*/
void LastTravel(BiTree node)
{
    if(node)
    {
        LastTravel(node->lc);
        LastTravel(node->rc);
        visit(node->data);
    }
}

void  main()
{
    BiNode n4,n5,n6,n7,n8,n9;
    BiTree n1 = MakeNode(10,NULL,NULL);
    BiTree n2 = MakeNode(20,NULL,NULL);
    BiTree n3 = MakeNode(100,n1,n2);
    SetNodeData(11,&n4);
    SetNodeData(12,&n5);
    SetNodeData(13,&n6);
    SetNodeData(14,&n7);
    SetNodeData(33,&n8);
    SetNodeData(44,&n9);
    SetLeftChild(n1,&n4);
    SetRightChild(n1,&n5);
    SetLeftChild(n2,&n6);
    SetRightChild(n2,&n7);
    InsertChild(n1,&n8,0);
    InsertChild(&n5,&n9,1);
    printf("The Depth of the tree is %d\n",GetDepth(n3));   
    PreOrderTravel(n3);
    //LastTravel(n3);
}
搜索更多相关主题的帖子: 网上 include return 二叉树 
2013-05-10 21:19
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:4 
你说下问题是什么啊!自己调试看看

Maybe
2013-05-10 21:48
黑客编程
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2013-4-18
收藏
得分:4 
你想说什么
2013-05-10 23:11
wsdyi100
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-10
收藏
得分:0 
没什么问题,发表下
2013-05-11 16:43
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:4 
好吧路过下
2013-05-11 22:24
小愚公
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2013-5-12
收藏
得分:4 
来学习一下。
2013-05-12 22:31
快速回复:网上一边参考一边写的二叉树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044286 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved