PAT1020 一个case出现段错误,可是我找不到

//PAT1020 二叉树 建树 层序遍历
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <queue>
using namespace std;
typedef int ElementType ;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
	ElementType Data;
	BinTree Left;
	BinTree right;
};

Position BuildTree(ElementType InOrder[],ElementType PostOrder[],int n){
	if(n==0)
	return NULL;

	struct TNode* root=(struct TNode*)malloc(sizeof(struct TNode));
	root->Data=PostOrder[n-1];

	int n1;
	for(int i=0;i<n;i++)
	if(InOrder[i]==PostOrder[n-1])
	n1=i;

	root->Left=BuildTree(InOrder,PostOrder,n1);
	root->right=BuildTree(InOrder+n1+1,PostOrder+n1,n-n1-1);

	return root;
}

void LeverOrderTraversals(BinTree BT){//copy from mooc! 抄错了一次 line49  T->Left 不是BT->left
	int flag=0;
	queue<struct TNode>q;
	BinTree T;
	if(!BT) return;
	q.push(*BT);
	while(!q.empty()){
		T=&q.front();
		q.pop();
		if(!flag){
			flag=1;
			printf("%d",T->Data);
		}
		else
		printf(" %d",T->Data);
		if(T->Left) q.push(*T->Left);
		if(T->right) q.push(*T->right);
	}
};

int main(){
		int n;
		ElementType PostOrder[300],InOrder[300];
		scanf("%d",&n);
		for(int i=0;i<n;i++)
	    scanf("%d",&PostOrder[i]);
	    for(int i=0;i<n;i++)
	    scanf("%d",&InOrder[i]);

	    Position root=BuildTree(InOrder,PostOrder,n);
	    LeverOrderTraversals(root);

	    return 0;
}

  

时间: 2024-10-06 23:31:59

PAT1020 一个case出现段错误,可是我找不到的相关文章

一个不懂的段错误

test dword ptr [eax],eax ; probe page. 我在main里定义了a[2000][2000]={0},发现溢出情况,查找后发现: 这跟局部数组变量定义所分配的最大空间设置大小有关.局部变量的申请空间是存放于栈中,windows里默认栈内存是1M,所以当申请空间大于1M时就会出现溢出错误. 解决方法:将局部变量改成全局变量 原文地址:https://www.cnblogs.com/wwywy/p/11700695.html

PAT 1024 科学计数法 段错误

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出. 现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留. 输入格式: 每个输入包含1个测试用例,即一个以科学计数法表示的实数A.该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999. 输出格式: 对每个测

linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数

进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentation fault).编程非常久了,自觉不会出现非常低级的语法错误,经细致检查许久确实也未发现不论什么问题.在给非常多厉害的朋友看过代码后也未能帮助找到这个bug,后来经自己一番思索最终找到问题所在. 以下先给出线程函数的简化框架: void* thread_func(void* rank) { l

linux C++ 莫名奇妙的段错误(segmentation fault),无法调用其它函数

进来在linux下开发C++项目,遇到了非常奇怪的bug.项目需要多线程实现,在写好代码后,每当运行到线程函数内部,当内部调用其它函数如printf.fopen等时就会提示段错误(segmentation fault).编程很久了,自觉不会出现很低级的语法错误,经仔细检查许久确实也未发现任何问题.在给很多厉害的朋友看过代码后也未能帮助找到这个bug,后来经自己一番思索终于找到问题所在.下面先给出线程函数的简化框架: void* thread_func(void* rank) { long my_

一个多线程问题引发的血案-(代码段执行完毕,子进程未执行完毕导致段错误)

今天遇到一个问题,gdb执行程序完全没有问题,但直接执行就会段错误,百思不得其解,各种纠结,各种搜索引擎都试了一遍,无果!后来问题还是被我自己挖出来了. 看下边一段代码: int TaskSendControl() { pthread_t prov_thread[CLIENT_NUM]; int prov[CLIENT_NUM]; for(int i=0; i< CLIENT_NUM; i++) { prov[i] = i; if( pthread_create(&prov_thread[i

一个由快速排序引发的段错误

今天在实现一个查找功能的时候,需要用到排序,因为用的是C开发,就把自己之前写的快速排序算法直接拿来用了.代码如下: 1 static void QuickSort(ElemType *array,int left,int right) 2 { 3 if(left > right) 4 { 5 return; 6 } 7 int i,j; 8 ElemType temp, base; 9 base = array[left]; 10 i = left; 11 j = right; 12 while

C&amp;C++——段错误(Segmentation fault)

C/C++中的段错误(Segmentation fault) Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的.来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment 背景 最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多.而段错误就是让我非常头痛的一个问题.不过,目前写一个一千行左右的代码,也很少出现段错误,或者是即使出现

用gdb调试程序笔记: 以段错误(Segmental fault)为例

用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5.gdb调试入门 一.背景介绍这个笔记主要介绍开源的程序调试器(gdb)的入门知识,目的是使unix/linux环境的编程新手能够快速学会使用gdb调试程序的方法,同时也是对我使用gdb的一个经验总结.本文假设你能使用简单的unix/linux命令并能用gcc(GNU C Compiler, GNU

PTA 1004 Counting Leaves (30)(30 分)(建树dfs或者bfs,未AC 段错误)

1004 Counting Leaves (30)(30 分) A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Each input file contains one test case. Each case starts with a line containing 0 < N < 10