oj --二叉树的构造,遍历与前中序造后序,与malloc的一点小疑问

在这里插入图片描述
注意点:
在构造递归时候,注意左子树的个数,是mid-s2,而不是mid,并且这道题对于内存空间的申请没有运用到,不是很规范,直接开了数组进行初始化,然后直接用指针调用。

假如用malloc将会十分麻烦,一个一个结点地申请,最后一个结点一个结点的回收,还不如让操作系统自己回收,关于操作系统会不会自动回收,这篇博文讲的很明白
https://blog.csdn.net/WALLEZhe/article/details/69385474

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

using namespace std;
struct Node{
	Node *l;
	Node *r;
	char c;
}Tree[100];
int loc;
char a[30],b[30];

Node *creat(){
	Tree[loc].l = Tree[loc].r = NULL;
	return &Tree[loc++];
}

Node* build(int s1,int e1,int s2,int e2){
	Node* root = creat();
	root->c = a[s1];
	int mid;
	for(int i = s2; i <= e2; i++){
		if(b[i] == a[s1]){
			mid = i;
			break;
		}
	}
	//必须判断,“有停止的地方”
	if(mid != s2) 
	root->l = build(s1+1,s1+mid-s2,s2,mid-1);
	if(mid != e2)
	root->r = build(s1+mid+1-s2,e1,mid+1,e2);
	return root;
}
void postOrder(Node *T){
	if(T->l!=NULL)
		postOrder(T->l);
	if(T->r!=NULL)
		postOrder(T->r);
	cout<<T->c;
}

int main(){
	while(scanf("%s",&a)!=EOF){
		scanf("%s",&b);
		loc = 0;
		int lena = strlen(a);
		int lenb = lena;
		Node *T = build(0,lena-1,0,lenb-1);
		postOrder(T);
		cout<<endl;
	}
}```

发布了78 篇原创文章 · 获赞 3 · 访问量 6602

猜你喜欢

转载自blog.csdn.net/weixin_38023259/article/details/104119537