为什么不加&是错的
查看原帖
为什么不加&是错的
627149
hhhweiping3楼主2023/7/12 14:47
```cpp
```cpp
#include<bits/stdc++.h>

using namespace std;

typedef struct TreeNode {
	char val;
	struct TreeNode *lchild;
	struct TreeNode *rchild;
} TNode,*Tree;
//pos后序,in中序
TNode* Re_Build_Tree(string pos,string in,int n) {//为什么加&,加了&是对的 string &pos,string &in
	if(n==0)return NULL; 
	string rpos,lpos,rin,lin;
	int root=-1;
	TNode*node=(TNode*)malloc(sizeof(TNode));
	if(node==NULL)
		return NULL;
	node->val=pos[n-1];//先序遍历根节点为后序遍历的最后一个元素
	for(int i=0; i<n; i++) { //找到根节点在中序遍历的位置
		if(in[i]==pos[n-1]) {
			root=i;
			break;
		}
	}
	int lnum=0,rnum=0;
	for(int i=0; i<root; i++) {//左子树中序 
		lin[lnum++]=in[i];
	}
	for(int i=root+1; i<n; i++) {//右子树中序 
		rin[rnum++]=in[i];
	}
	for(int i=0; i<lnum; i++) {//左子树后序 
		lpos[i]=pos[i];
	}
	for(int i=0; i<rnum; i++) {//右子树后序 
		rpos[i]=pos[lnum+i];
	}
	node->lchild=Re_Build_Tree(lpos,lin,lnum);
	node->rchild=Re_Build_Tree(rpos,rin,rnum);
	return node;
}

void display(TNode*node) {
	if(node!=NULL) {
		cout<<node->val;
		display(node->lchild);
		display(node->rchild);
	} 
}
int main() {
	string pos,in;
	cin>>in>>pos;
	Tree node=Re_Build_Tree(pos,in,in.length());
	display(node);
	return 0;
}

2023/7/12 14:47
加载中...