请教大神哪里有问题,40%,C语言
查看原帖
请教大神哪里有问题,40%,C语言
1614116
JustAdieu楼主2024/12/12 19:29
#include<stdio.h>
#include<stdlib.h>
#ifndef TREE_H
#define TREE_H

typedef struct TreeNode {
	int value[2];
	struct TreeNode* left;
	struct TreeNode* right;
}TreeNode;

TreeNode* creatNode(int value[2]);
void insertNode(TreeNode** root, int value[2]);
void freeTree(TreeNode* root);
void countTree(TreeNode* root,int *count);
#endif
TreeNode* creatNode(int value[2]) {
	TreeNode* newnode = (TreeNode*)malloc(sizeof(TreeNode));
	if (newnode == NULL) {
		printf("Memory allocation error\n");
		exit(1);
	}
	else {
		newnode->value[0] = value[0];
		newnode->value[1] = value[1];
		newnode->left = NULL;
		newnode->right = NULL;
	}
	return newnode;
}

void insertNode(TreeNode** root, int value[2]) {
	if (*root == NULL) {
		*root = creatNode(value);
	}
	else {
		if ((*root)->value[0] > value[1]) {//不重叠区间位于原有区间左边
			insertNode(&((*root)->left), value);
		}
		else if ((*root)->value[1] < value[0]) {//不重叠区间位于原有区间右边
			insertNode(&((*root)->right), value);
		}
		else if ((*root)->value[0]<=value[0]&&(*root)->value[1]>=value[1]) {//重叠区间位于区间里面
		}
		else if ((*root)->value[0]>=value[0] && (*root)->value[1]<=value[1]) {//重叠区间位于区间外面
			(*root)->value[0] = value[0];
			(*root)->value[1] = value[1];
		}
		else if ((*root)->value[0]<=value[1]&& (*root)->value[1]>=value[1]) {//重叠区间位于原有区间左边
			(*root)->value[0] = value[0];
		}
		else if ((*root)->value[0]<=value[0] && (*root)->value[1]>=value[0]) {//重叠区间位于原有区间右边
			(*root)->value[1] = value[1];
		}
		else {
			printf("error!!!\n");
			exit(1);
		}
	}
}

void freeTree(TreeNode* root) {
	if (root != NULL) {
		freeTree(root->left);
		freeTree(root->right);
		free(root);
	}
}

void countTree(TreeNode* root,int *count) {
	if (root != NULL) {
		*count += (root->value[1] - root->value[0] + 1);
		countTree(root->left, count);
		countTree(root->right, count);
	}
}

int main() {
	int number, area,count=0;
	scanf("%d %d", &number, &area);
	getchar();
	TreeNode* root = NULL;
	int (*value)[2] = malloc(area * sizeof(int[2]));
	if (value == NULL) {
		fprintf(stderr, "Memory allocation error\n");
		exit(1);
	}
	for (int i = 0; i < area; i++) {
		scanf("%d %d",&value[i][0],&value[i][1]);
		getchar();
		insertNode(&root, value[i]);
	}
	countTree(root, &count);
	count = number + 1 - count;
	printf("%d", count);
	freeTree(root);
	free(value);
	return 0;
}
2024/12/12 19:29
加载中...