首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C中无递归的情况下计算二叉树的叶子个数?

在C语言中,可以使用迭代的方式来计算二叉树的叶子节点个数,而不使用递归。以下是一个实现的示例代码:

代码语言:txt
复制
#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语言中使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券