写出求二叉树的叶子结点数目的算法

2024-11-16 02:15:29
推荐回答(3个)
回答1:

int BtreeDepth(BiTNode *BT){//求二叉树的深度
if (BT==NULL)//空树则返回0
return 0;
else{
int dep1=BtreeDepth(BT->lchild );//递归调用逐层分析
int dep2=BtreeDepth(BT->rchild );
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
int Leave(BiTNode *BT){//求二叉树中的叶子节点数
if (BT==NULL)
return 0;
else{
if(BT->lchild ==NULL && BT->rchild ==NULL)
return 1;
else
return(Leave(BT->lchild )+Leave(BT->rchild ));
}
}

这是我学数据结构时做的练习,用的是递归的形式,理解时需稍稍的想一下,但是函数这样写起来会相对比较的简单。

希望对你的问题有所帮助,同时也祝你的问题早日得到解决,呵呵!

回答2:

void ShowLeafNodeCount( BiTree node, int *count )
{
// 判断左边是否存在子节点
if( node->lchild )
ShowLeafNodeCount( node->lchild, count );
// 接着判断右边是否存在子节点
if( node->rchild )
ShowLeafNodeCount( node->rchild, count );
// 都没有的话,则为叶子结点,累加1
if( node->lchild==NULL && node->rchild==NULL )
++*count;
}

int LeafBiTree( BiTree t )
{
int c = 0;
ShowLeafNodeCount( t, &c );
return c;
}

回答3:

买本实验书配着教科书好好看吧,很简单的。学习数据结构要耐得住,静得下心来。