关于统计二叉树中度数为一的结点个数算法很不理解 求高手赐教!!! 详细点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于统计二叉树中度数为一的结点个数算法很不理解 求高手赐教!!! 详细点相关的知识,希望对你有一定的参考价值。

统计二叉树中度为1的结点个数。
template <class Type>
int BinaryTree<Type> :: Degrees1 ( BinTreeNode<Type> * t ) const
if ( t == NULL ) return 0;
if ( t->leftChild != NULL && t->rightChild == NULL ||
t->leftChild == NULL && t->rightChild != NULL ) return 1;//我非常不理解这里 既然都返回1了,那后面继续递归,如果还有度数为一的结点那怎么办呢,为什么没有设定一个count统计数目呢 这样子递归能实现么???
return Degrees1 ( t->leftChild, k ) + Degrees1 ( t->rightChild, k );

你这个是间接递归:
有两个函数数:Degrees1 ( BinTreeNode<Type> * t )
及:Degrees1 ( t->leftChild, k )

你分别看看这两个函数的实现应该能明白
参考技术A 有这么一种可能,一直都是度数为1的结点二叉树一直到底,所以还需要递归,只有递归到底才能实现所有的度数为1的二叉树的结点个数的统计啊~

分别统计二叉树中树叶和度为1的结点个数.

分别统计二叉树中树叶和度为1的结点个数.
计算二叉树的高度

不好意思 昨天比较忙 屁颠屁颠的 今天给你写了下 就把这3个算法写了下 在自己的程序上测试过了 都没问题 树的建立就你自己做吧 3个操作如下
int LeafCount(BTree T)

if (!T) return 0;
else if (!T->lchild && !T->rchild)

return 1;

else

return LeafCount(T->lchild) + LeafCount(T->rchild);



void OneDegree(BTree T,int &count)

if (!T || (!T->lchild && !T->rchild)) return;
else if (T->lchild && !T->rchild)

++count;
OneDegree(T->lchild,count);

else if (!T->lchild && T->rchild)

++count;
OneDegree(T->rchild,count);

else

OneDegree(T->lchild,count);
OneDegree(T->rchild,count);



int TreeDepth(BTree T)

if (!T) return 0;
else

return (TreeDepth(T->lchild) > TreeDepth(T->rchild) ? TreeDepth(T->lchild) : TreeDepth(T->rchild)) + 1;


参考技术A 结点个数=2*高度 -1

以上是关于关于统计二叉树中度数为一的结点个数算法很不理解 求高手赐教!!! 详细点的主要内容,如果未能解决你的问题,请参考以下文章

设计一个算法,计算出给定二叉树中任意2 个结点之间的最短路径。

数据结构算法设计——统计二叉树叶子结点的个数,并输出结果

统计二叉树的节点个数

分别统计二叉树中树叶和度为1的结点个数.

二叉树的操作之统计二叉树中节点的个数

数据结构——二叉树 前序中序后序层次遍历及非递归实现 查找统计个数比较求深度的递归实现(转)