parent
63f689cba7
commit
75bf451df0
@ -1,50 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct TreeNode {
|
||||
void (*func)(struct TreeNode *); // 节点的函数
|
||||
struct TreeNode *left; // 左子节点
|
||||
struct TreeNode *right; // 右子节点
|
||||
} TreeNode;
|
||||
void nodeFunction(TreeNode *node) {
|
||||
printf("Node function executed: %p\n", (void *)node);
|
||||
}
|
||||
|
||||
void leafFunction(TreeNode *node) {
|
||||
printf("Leaf function executed: %p\n", (void *)node);
|
||||
}
|
||||
TreeNode *createBinaryTree(int depth) {
|
||||
if (depth == 0) return NULL;
|
||||
|
||||
TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
|
||||
node->func = (depth > 1) ? nodeFunction : leafFunction; // 叶节点使用 leafFunction
|
||||
node->left = createBinaryTree(depth - 1);
|
||||
node->right = createBinaryTree(depth - 1);
|
||||
return node;
|
||||
}
|
||||
void executeTree(TreeNode *node) {
|
||||
if (node == NULL) return;
|
||||
// 首先递归执行左右子节点
|
||||
executeTree(node->left);
|
||||
executeTree(node->right);
|
||||
// 然后执行当前节点的函数
|
||||
node->func(node);
|
||||
}
|
||||
void freeTree(TreeNode *node) {
|
||||
if (node == NULL) return;
|
||||
freeTree(node->left);
|
||||
freeTree(node->right);
|
||||
free(node);
|
||||
}
|
||||
|
||||
int main() {
|
||||
// 创建一个深度为 3 的二叉树
|
||||
TreeNode *root = createBinaryTree(3);
|
||||
|
||||
// 执行二叉树
|
||||
executeTree(root);
|
||||
|
||||
// 释放二叉树占用的内存
|
||||
freeTree(root);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue