注册 登录
编程论坛 数据结构与算法

二叉树的程序疑惑

zhanghang123 发布于 2010-11-09 09:38, 498 次点击
#include<iostream.h>
#include<stdlib.h>
typedef struct Node
{
    char ch;
    char data;
    struct Node *lchild;
    struct Node *rchild;
}BiTNode,*BiTree;

void CreateBitree(BiTree *root)
{
    char ch;
    cin>>ch;
    if(ch=='#')
        *root=NULL;
    else
    {
        *root=(BiTNode *)malloc(sizeof(BiTNode));
        (*root)->data=ch;
        CreateBitree(&((*root)->lchild));
        CreateBitree(&((*root)->rchild));
    }
}

int depth(BiTree root)
{
    int ldepth,rdepth;
    if(!root)
        return 0;
    else
    {
        ldepth=depth(root->lchild);
        rdepth=depth(root->rchild);
        if(ldepth>rdepth)
            return ldepth+1;
        else
            return rdepth+1;
    }
    return 1;
}

void countleaf(BiTree bt,int *c)
{
    if(bt)
    {
        if(bt->lchild==NULL&&bt->rchild==NULL)
        {
            *c=*c+1;
        }
        countleaf(bt->lchild,c);
        countleaf(bt->rchild,c);
    }
}

void main()
{
    BiTree bt;
    CreateBitree(&bt);
    cout<<"树的深度: "<<depth(bt)<<endl;
    int c=0;
    countleaf(bt,&c);
    cout<<"叶子结点个数: "<<c<<endl;
}
在上述程序中,为什么树的深度和叶子结点个数求不对?请高手指点一下!
2 回复
#2
寒风中的细雨2010-11-09 12:39
贴张 不对的图上来

在我上面运行的
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#3
zhanghang1232010-11-10 13:29
回复 2楼 寒风中的细雨
我对其中的树的分层不明白。运行结果如下:
结果(1):
a
s#
####
树的深度:2
叶子结点个数:1
结果(2):
s
ae
####
树的深度:3
叶子结点个数:1
程序中对分层如何定义的?请指教


1