数据结构C语言题目,求详细代码,大神你好厉害的,求你帮帮忙

2025-05-19 14:40:18
推荐回答(1个)
回答1:

#include
#include

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

#define size sizeof(struct TreeNode)

struct TreeNode * createTree() {
int val;
struct TreeNode *tree;
scanf("%d",&val);
if(val) {
tree = (struct TreeNode *)malloc(size);
tree->val = val;
tree->left = createTree();
tree->right = createTree();
} else {
tree = NULL;
}
return tree;
}

void visit(struct TreeNode *tree) {
printf("%d ",tree->val);
}

int preorder_recursive(struct TreeNode *tree) {
if (tree) {
visit(tree);
return 1 + preorder_recursive(tree->left) + preorder_recursive(tree->right);
}
return 0;
}

int searchSum(struct TreeNode *tree,struct TreeNode *treePath[],int length,int sum) {
if(tree == NULL) return 0;
int flag = 1;
for(int i=0; i if(treePath[i]!=NULL) {
if(treePath[i] == tree->left || treePath[i] == tree->right || treePath[i]->left == tree || treePath[i]->right == tree) {
flag = 0;
}
}
}
if(flag) {
treePath[length] = tree;
int sum1 = sum + tree->val + searchSum(tree->left,treePath,length+1,sum) + searchSum(tree->right,treePath,length+1,sum);
treePath[length] = NULL;
int sum2 = sum + searchSum(tree->left,treePath,length,sum) + searchSum(tree->right,treePath,length,sum);
if(sum1 > sum2) sum = sum1;
else sum = sum2;
} else {
sum += searchSum(tree->left,treePath,length,sum) + searchSum(tree->right,treePath,length,sum);
}
return sum;
}

int main() {
struct TreeNode *tree = createTree();
printf("二叉树:\n");
int count = preorder_recursive(tree);
struct TreeNode *treePath[count];
for(int i=0; i treePath[i]=NULL;
}
printf("\n和:\n%d", searchSum(tree,treePath,0,0));
}