统计二叉树1度结点的个数的算法.请各位帮忙.

bookoo 2008-12-11 10:49:23
不知道从哪里入手,请指点.
...全文
662 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzbaiyanli 2012-05-30
  • 打赏
  • 举报
回复
template<class T>
int BiTree<T>::CountOne(BiNode<T>* root)
{
int n=0;
if(root==NULL) return 0;
else if((root->lchild==NULL&&root->rchild!=NULL) ||(root->lchild!=NULL&&root->rchild==NULL)) n=1;
return CountOne(root->lchild)+CountOne(root->rchild)+n;
}
shyli 2008-12-11
  • 打赏
  • 举报
回复
是求叶子结点吗?
DFS二叉树,如果某个结点的左右孩子指针都为空,该结点就是叶子结点了。
wzg112 2008-12-11
  • 打赏
  • 举报
回复
up
bookoo 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 CPlusPlusFans 的回复:]
设度为0的结点数为n0,度为1的为n1,度为2的为n2,总结点数为n
n0=n2+1,这是定理
n=n0+n1+n2,一般情况下n,即总数是已知的
由此发现n0与n2还是无法求得,也就是通过公式是无法直接求得n1的。

所以只能使用遍历算法

int countN1(TreeNode node)
{
int l=0,r=0;
if (node.lchild==null && node.rchild==null) return 0;//叶子节点不计数
else if (node.lchild==null && node.rchild!=null) retur…
[/Quote]




也是这么考虑的:用定理是一种方法/
因为直接用算法求:不知道怎么入手/
谢谢指点
CPlusPlusFans 2008-12-11
  • 打赏
  • 举报
回复
设度为0的结点数为n0,度为1的为n1,度为2的为n2,总结点数为n
n0=n2+1,这是定理
n=n0+n1+n2,一般情况下n,即总数是已知的
由此发现n0与n2还是无法求得,也就是通过公式是无法直接求得n1的。

所以只能使用遍历算法

int countN1(TreeNode node)
{
int l=0,r=0;
if (node.lchild==null && node.rchild==null) return 0;//叶子节点不计数
else if (node.lchild==null && node.rchild!=null) return 1+countN1(node.rchild);//有右子树,本身又是度为1
else if (node.lchild!=null && node.rchild==null) return 1+countN1(node.lchild);//有左子树,本身又是度为1
else return countN1(node.lchild)+count(node.rchild);//度为2,返回左右子树度为一之和
}

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧