C++二叉树叶子结点的数量不对呢? 二叉树叶子结点总数的算法
c语言``帮忙找错误```求二叉树叶子结点数```
输入:a回车0回车0回车,没有返回是因为
你scanf是以%c格式输入字符,这样就是每次只输入一个字符,按你的思路就应该是直接输入“a00”再回车。
你那样输入的话,回车也作为一个字符(ASCII码为10,八进制为12),输入到树里去了,相当于字符序列'a' '\012' '0' '\012' '0' '\012',递归还在继续。
/******************************************/
CreatBiTree函数中的两个递归调用中的参数不对,还需取个地址,改为如下:
CreatBiTree( &( (*T)->lchild ) );
CreatBiTree( &( (*T)->rchild ) );
leafcount函数中同上,改为如下:
if(!((*T)->lchild)&&!((*T)->rchild)) total++;} //这最后的大括号,删了
leafcount( &( (*T)->lchild ) );
leafcount( &( (*T)->rchild ) );
二叉树叶子节点数的问题
满二叉树的节点数为 2的N次方-1,由此可知此完全二叉树对应的满二叉树的节点数为511,层数为9
由此,此完全二叉树最后一层(9层)有500-2的八次方+1=245个节点。那么8层有2的七次方-(245+1)/2=5个节点是叶子节点。
所以共有叶子节点245+5 =250个。(最后一层节点数+倒数第二层的叶子节点数)
二叉树统计叶子结点数,有问题吗???
不好意思,没看见有返回值
depth = lDepth > rDepth ? lDepth:rDepth; 要放到else的括号里面,不然的话当T==NULL时,还要执行这句代码,这时候lDepth和rDepth都没初始化,全是大的负数,就出错了
int TreeDepth(BiTree T)
{
int depth;
int lDepth;
int rDepth;
if (T == NULL)
{
return 0;
}
else
{
lDepth = TreeDepth(T->lchild);
rDepth = TreeDepth(T->rchild);
depth = lDepth > rDepth ? lDepth:rDepth;
return depth + 1;
}
}
满二叉树的叶子结点个数
所谓叶子结点,就是最后一层.
晕,明明叶子结点的计算的方法是:2的(K-1)次方.其中K为深度
不知道你上面的话是什么意思.