Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

二叉链表的存储结构建树时要用指针的指针,本地调试的时候发现了这个问题

Posted by kuaichenyang at 2015-12-22 22:54:18 on Problem 1577 and last updated at 2015-12-22 22:55:15
http://blog.163.com/beachman_cy/blog/static/249496019201511229338503/

Problems: Falling Leaves
Description:  现在有一颗二叉排序树,让他的叶子一层一层脱落,然后让你恢复这颗二叉排序树!输出它的前序遍历序列!
Solution: 首先要恢复这颗排序二叉树,注意,它是一层一层脱落的,那么我们倒过来建立这颗二叉排序树,就是一个一个往二叉排序树中插入元素,开始的时候我没看清楚是一颗排序树,所以觉得无从下手,既然是二叉排序树那么很好做了,就是教科书上建立二叉排序树的过程,注意一下,建立二叉排序树时,要用指针的指针,因为你是要为指针赋值,而不是用指针来引用元素!
Code(C++): 

#include <stdio.h>
#include <string.h>
#include <malloc.h>

const int _MAXN=1000;

typedef struct tagTree{
	tagTree *right,*left;
	char character;
}Tree;

char string[_MAXN];
Tree *root;

void insertTree(Tree **p,char c){
	if((*p)==NULL){
		(*p)=(Tree *)malloc(sizeof(Tree));
		(*p)->left=NULL;
		(*p)->right=NULL;
		(*p)->character=c;
		return ;
	}
	if(c<(*p)->character){
		insertTree(&(*p)->left,c);
	}else{
		insertTree(&(*p)->right,c);
	}
}

void print(Tree *p){
	if(p!=NULL){
		printf("%c",p->character);
		print(p->left);
		print(p->right);
	}
}

int main(){
	char tmpString[100];
	while(true){
		//initialize
		memset(string,0,sizeof(string));
		while(scanf("%s",tmpString),tmpString[0]!='*'&&tmpString[0]!='$'){
			strcat(string,tmpString);
		}
		int len=strlen(string);
		root=NULL;
		for(int i=len-1;i>=0;i--){
			insertTree(&root,string[i]);
		}

		//print
		print(root);
		puts("");

		if(tmpString[0]=='$'){
			break;
		}
	}
	return 0;
}

得交C++,G++ CompileError,说没有malloc.h这个文件,也是醉了

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator