C言語で再帰を使用して二分木を生成する方法は何ですか?
C言語では、構造体と再帰関数を使用して二分木を生成することができます。以下は簡単なサンプルコードです。
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 递归生成二叉树
Node* createBinaryTree() {
int data;
Node* root = NULL;
printf("输入节点的值(-1表示空节点):");
scanf("%d", &data);
if (data == -1) {
return NULL;
}
root = createNode(data);
printf("输入%d的左子节点:\n", data);
root->left = createBinaryTree();
printf("输入%d的右子节点:\n", data);
root->right = createBinaryTree();
return root;
}
// 测试函数
void preorderTraversal(Node* root) {
if (root != NULL) {
printf("%d ", root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
int main() {
Node* root = createBinaryTree();
printf("前序遍历结果:\n");
preorderTraversal(root);
return 0;
}
上記のコードでは、まずNode構造体を定義し、新しいノードを作成するcreateNode関数を定義します。その後、再帰関数createBinaryTreeを使用して二分木を生成し、ユーザーはノードの値を入力でき、-1は空のノードを表します。最後に、生成された二分木を出力する前順走査関数preorderTraversalを使用します。
このコードを実行して、指示に従ってノードの値を入力すると、二分木を生成し、先行順位遍歴の結果を出力できます。