已知二叉树中的结点类型用BinTreeNode表示,被定义为:
struct BinTreeNode{
char data; BinTreeNode *lChild, *rChild;};
其中:data为结点值域;lChild和rChild分别为指向左、右子女结点的指针域。
根据下面函数声明编写出求一棵二叉树叶子节点数目的算法。
Int BtCouLeaves(BinTreeNode *BT);
Int BtCouLeaves(BinTreeNode *BT)
{int count,lum,rnum;
count=0;
if(BT)
{if(BT->lchild&&BT->rchild) count++;
else{ lnum=BtCouLeaves(BT->lchild);
rnum=BtCouLeaves(BT->rchild);
count=lnum+rnum;
}
}
return count;
}这是求叶子节点的算法!题目改为求非叶子结点了,怎么做啊?
struct BinTreeNode{
char data; BinTreeNode *lChild, *rChild;};
其中:data为结点值域;lChild和rChild分别为指向左、右子女结点的指针域。
根据下面函数声明编写出求一棵二叉树叶子节点数目的算法。
Int BtCouLeaves(BinTreeNode *BT);
Int BtCouLeaves(BinTreeNode *BT)
{int count,lum,rnum;
count=0;
if(BT)
{if(BT->lchild&&BT->rchild) count++;
else{ lnum=BtCouLeaves(BT->lchild);
rnum=BtCouLeaves(BT->rchild);
count=lnum+rnum;
}
}
return count;
}这是求叶子节点的算法!题目改为求非叶子结点了,怎么做啊?
{int count,lum,rnum;
count=0;
if(BT)
{
if(BT-> lchild || BT-> rchild)
{
++count;
lnum=BtCouLeaves(BT-> lchild);
rnum=BtCouLeaves(BT-> rchild);
count=lnum+rnum+count;
}
}
return count;
}
{int count,lum,rnum;
count=0;
if(BT)
{
if(!BT-> lchild ¦ ¦! BT-> rchild)
{
++count;
lnum=BtCouLeaves(BT-> lchild);
rnum=BtCouLeaves(BT-> rchild);
count=lnum+rnum+count;
}
}
return count;
}
if(BT)
才递归求和计算