C语言计算“孩子链表表示法”下二叉树的叶子结点个数#define MAX_TREENODE_NUM 100 // "孩子链表表示法" 中二叉树的最大节点个数 // "孩子链表表示法" 中孩子链表节点结构体类型定义 typedef struct ChildNode { int Child; // 孩子节点的位置(索引号) struct ChildNode *Next; // 指向下一个孩子的指针 }ChildNode; // "孩子链表表示法" 中二叉树节点结构体类型定义 typedef struct DataNode { char Data; // 二叉树中节点的数据类型 struct ChildNode *FirstChild; // 指向二叉树中节点的第一个孩子的指针 }DataNode; // "孩子链表表示法" 中二叉树结构体类型定义 typedef struct ChildTree { DataNode Nodes[ MAX_TREENODE_NUM ]; // 二叉树的"孩子链表表示法" int Root; // 树根节点的游标 - 静态指针值 int TreeNodeNum // 二叉树中实际的节点数目 }ChildTree;
时间: 2024-01-29 12:04:42 浏览: 139
下面是计算孩子链表表示法下二叉树的叶子结点个数的 C 语言代码:
```c
int CountLeafNodes(ChildTree* tree, int nodeIndex)
{
if (nodeIndex == -1) { // 空节点,返回 0
return 0;
}
if (tree->Nodes[nodeIndex].FirstChild == NULL) { // 叶子节点,返回 1
return 1;
}
int leftChild = tree->Nodes[nodeIndex].FirstChild->Child;
int rightChild = -1;
if (tree->Nodes[nodeIndex].FirstChild->Next != NULL) {
rightChild = tree->Nodes[nodeIndex].FirstChild->Next->Child;
}
return CountLeafNodes(tree, leftChild) + CountLeafNodes(tree, rightChild);
}
```
该算法使用递归的方式遍历二叉树,如果当前节点为空,返回 0;如果当前节点为叶子节点,返回 1;否则,递归遍历左右子树,并将结果相加。其中,左子树的根节点为当前节点的第一个孩子,右子树的根节点为当前节点的第二个孩子(如果存在)。注意,当右子树为空时,右子树的根节点索引值为 -1。最后,调用该函数时,传入的参数 nodeIndex 应为根节点的索引值。
阅读全文