以下函数对给定的二叉树有什么作用?
int fun(struct node *root)
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
return 0;
return 1 + fun(root->left) + fun(root->right);
}
(A)计算叶节点
(B)计算内部节点
(C)返回高度,其中高度定义为从根到最深节点的路径上的边数
(D)返回直径,其中直径是任意两个节点之间的最长路径上的边数。答案: (B)
说明:该函数计算内部节点。
1)如果root为NULL或叶节点,则返回0。
2)否则返回1,再加上左子树中的内部节点数,再加上右子树中的内部节点数。
请参阅以下完整程序。
#include
struct node
{
int key;
struct node *left, *right;
};
int fun(struct node *root)
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
return 0;
return 1 + fun(root->left) + fun(root->right);
}
/* Helper function that allocates a new node with the
given key and NULL left and right pointers. */
struct node* newNode(int key)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->key = key;
node->left = NULL;
node->right = NULL;
return(node);
}
/* Driver program to test above functions*/
int main()
{
/* Constructed binary tree is
1
/ \
2 3
/ \ /
4 5 8
*/
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left = newNode(8);
printf("%d", fun(root));
getchar();
return 0;
}
这个问题的测验