MST

星途 面试题库

面试题:C语言可变参数宏结合递归处理复杂数据结构

假设存在一个简单的树状数据结构,节点定义如下: ```c struct TreeNode { int value; struct TreeNode *left; struct TreeNode *right; }; ``` 请使用C语言的可变参数宏,以递归的方式构建这棵树,宏的参数为各个节点的值,按照前序遍历的顺序传入。例如 `CREATE_TREE(1, 2, 4, 0, 0, 5, 0, 0, 3, 6, 0, 0, 7, 0, 0)` 可以构建一棵根节点值为1,左子树节点值为2、4、5,右子树节点值为3、6、7的树(这里0表示空节点)。请给出完整的宏定义及使用示例代码。
37.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

struct TreeNode {
    int value;
    struct TreeNode *left;
    struct TreeNode *right;
};

#define CREATE_TREE(...) create_tree(__VA_ARGS__, 0)

struct TreeNode* create_tree(int value, ...) {
    va_list args;
    struct TreeNode *node;
    if (value == 0) {
        return NULL;
    }
    node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    node->value = value;
    va_start(args, value);
    node->left = create_tree(va_arg(args, int), args);
    node->right = create_tree(va_arg(args, int), args);
    va_end(args);
    return node;
}

void pre_order(struct TreeNode *root) {
    if (root) {
        printf("%d ", root->value);
        pre_order(root->left);
        pre_order(root->right);
    }
}

int main() {
    struct TreeNode *root = CREATE_TREE(1, 2, 4, 0, 0, 5, 0, 0, 3, 6, 0, 0, 7, 0, 0);
    pre_order(root);
    return 0;
}