设某棵二叉树中度数为 0 的结点数为 N0 ,度数为 1 的结点数为 N1 ,则该二叉树中度数为 2 的结点数为? ;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有 ? 个空指针域

度数为 2 的结点数为N0-1;有 2N0+N1个空指针域

分析:

根据总结点数=总度数+1,所以N0+N1+N2=0✘N0+1✘N1+2✘N2+1,得出N2=N0-1,度数为2的结点数就为N0-1

二叉链表中每个结点有左右孩子两个指针域,分别为lchild和rchild,所以令总结点为n,则二叉链表有2n个指针域,除了根结点外,都有一个指针指向一个结点,所以有n-1个非空指针域,就会有2n-(n-1)=n+1个空指针域

转化为题目已知条件

n=N0+N1+N2=N0+N1+N0-1=2N0+N1-1

n+1=2N0+N1-1+1=2N0+N1

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一份计算二叉树度为1的结点数的C程序: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *left; struct node *right; } Node; int countSingleDegreeNodes(Node *root) { if (root == NULL) { return 0; } int count = 0; if (root->left == NULL && root->right != NULL) { count++; } else if (root->left != NULL && root->right == NULL) { count++; } count += countSingleDegreeNodes(root->left); count += countSingleDegreeNodes(root->right); return count; } int main() { // 构造一二叉树 Node *root = (Node*) malloc(sizeof(Node)); root->data = 1; root->left = (Node*) malloc(sizeof(Node)); root->left->data = 2; root->left->left = NULL; root->left->right = (Node*) malloc(sizeof(Node)); root->left->right->data = 3; root->left->right->left = NULL; root->left->right->right = NULL; root->right = (Node*) malloc(sizeof(Node)); root->right->data = 4; root->right->left = (Node*) malloc(sizeof(Node)); root->right->left->data = 5; root->right->left->left = NULL; root->right->left->right = NULL; root->right->right = NULL; int count = countSingleDegreeNodes(root); printf("The count of single degree nodes in the binary tree is %d\n", count); return 0; } ``` 在这个程序,我们首先定义了一个节点结构体 `Node`,它包括三个成员变量:`data` 存储节点的数据,`left` 存储左子节点的指针,`right` 存储右子节点的指针。 接着,我们实现了一个名为 `countSingleDegreeNodes` 的函数,它用于计算二叉树度为1的结点数。该函数采用递归的方式遍历二叉树,对于每个节点,如果它的左子树为空但右子树非空,或者它的左子树非空但右子树为空,那么它就是一个度为1的节点,计数器加1。然后分别递归遍历左子树和右子树,将计数器累加起来并返回。 最后,我们在 `main` 函数构造了一二叉树,并调用 `countSingleDegreeNodes` 函数计算其度为1的节点数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值