在C语言中,可以使用迭代的方式来计算二叉树的叶子节点个数,而不使用递归。以下是一个实现的示例代码:
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 计算二叉树叶子节点个数的函数
int countLeaves(TreeNode* root) {
if (root == NULL) {
return 0;
}
int count = 0;
TreeNode* stack[100]; // 使用栈来辅助迭代
int top = -1;
TreeNode* current = root;
while (current != NULL || top != -1) {
while (current != NULL) {
stack[++top] = current;
current = current->left;
}
current = stack[top--];
if (current->left == NULL && current->right == NULL) {
count++;
}
current = current->right;
}
return count;
}
int main() {
// 创建二叉树
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 计算叶子节点个数
int leaves = countLeaves(root);
printf("二叉树的叶子节点个数为:%d\n", leaves);
return 0;
}
上述代码中,首先定义了二叉树节点的结构体,并实现了创建节点的函数createNode
。然后,使用迭代的方式计算二叉树的叶子节点个数的函数countLeaves
。该函数使用了一个栈来辅助迭代,通过遍历二叉树的所有节点,判断是否为叶子节点,从而计算叶子节点的个数。最后,在main
函数中创建了一个二叉树,并调用countLeaves
函数来计算叶子节点个数,并输出结果。
这是一个简单的无递归计算二叉树叶子节点个数的实现,可以在C语言中使用。
领取专属 10元无门槛券
手把手带您无忧上云