计算二叉树中双分支结点个数递归过程
这是一个计算二叉树中双分支结点个数的算法,对于这个算法不是很理解,设置断点调试了许久还是不能理解透,特别是那个n,为什么要这样设......这个递归过程是怎样的,最好能列一个表(root结点,栈中结点,n,a,b,c)
int TwoDegreeCount(BTNode *root)
{
int n=0;
if(root==NULL)
return 0;
if(root->left!=NULL && root->right!=NULL)
n=1;
int a=TwoDegreeCount(root->left) ;
int b=TwoDegreeCount(root->right);
int c=n+a+b;
return c;
}
下面这个是原代码,为了方便调试才改成上面那样的
int TwoDegreeCount(BTNode *root)
{
int n=0;
if(root==NULL)
return 0;
if(root->left!=NULL && root->right!=NULL)
n=1;
return n + TwoDegreeCount(root->left) + TwoDegreeCount(root->right);
}
[解决办法]
一个典型的递归算法,从root起分别往左往右递归。自己多体会体会。
[解决办法]
递归你就把这个函数再运行一遍就知道了。求二叉树的深度也是这样的。
twoDegreeCount(left)的调用过程你自己运行一下(脑子里想一下过程,把递归调用函数的树形结构画出来)
楼主加油