分享

求二叉树的结点个数

 飞鸿踏雪泥f1rd 2019-10-15

求二叉树的结点个数
如下利用递归来实现
方法一

根据递归函数实现,如果树不为空,根节点为11 统计根节点左子树2 统计根节点右子树3 将左子树节点个数+右子树节点个数+根节点个数1=即为整颗树的节点个数4 统计左右子树的节点个数也是按照1~3的步骤进行5 当树为空时,根节点的个数为0,即为递归函数的出口。
123 //方法一 : 结点个数= 树的左子树结点,加右子树结点+根结点(1)124 125 size_t TreeSize(TreeNode* root)126 {127     if(root==NULL)128     {129         return 0130     }131     //统计左子树的节点个数132     size_t lsize=TreeSize(root->lchild);133     //统计右子树的节点个数134     size_t rsize=TreeSize(root->rchild);135     return 1+lsize+rsize;                                                                                                                                          136 }

方法二
将先序遍历打印操作改写为计数器加1操作,当遍历到非空节点时计数器+1

1 先遍历根节点,计数器+1 2 然后递归遍历左子树 3 再递归遍历右子树 4 子树的遍历也遵循1~3的过程 5 当子树为空,直接返回,跳出递归函数

递归过程中计数器一直在改变,所以计数器应在递归函数外面,然后通过其地址改变值

139 void _TreeSize1(TreeNode* root, size_t* count)140 {141     if(root==NULL)142     {143         //空树                                                                                                                                                     144         return ;145     }146     if(count==NULL)147     {148         //非法输入149         return ;150     }151     (*count)++;152     _TreeSize1(root->lchild,count);153     _TreeSize2(root->rchild,count);154     return ;155 }156 size_t TreeSize1(TreeNode* root)157 {158     if(root==NULL)159     {160         //空树161         return 0;162     }163     size_t count=0;164     _TreeSize1(root,&count);165     return count ;166 }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多