文章

14

粉丝

0

获赞

16

访问

914

头像
二叉树的先序序列 可以和3779对比的 题解:
P4355
发布于2026年2月27日 23:22
阅读数 11

#include<bits/stdc++.h>
using namespace std;

struct Tree{
	char data;
	Tree *lchild, *rchild;
};

void buildT(Tree *&T, string &zhongxv, string &houxv)
{
	if(zhongxv.empty()) {T = nullptr; return;}
	T = new Tree; T->lchild = nullptr; T->rchild = nullptr;
	int i = houxv.size() - 1;
	char c = houxv[i]; int idx = zhongxv.find(c);//在中序遍历找到(后续遍历最后节点)的位置
	T->data = c; //别忘记赋值

	string left_zx = zhongxv.substr(0, idx);
	string right_zx = zhongxv.substr(idx + 1); //字符串切割

	int ln = left_zx.size(); int rn = right_zx.size();

	string left_hx = houxv.substr(0, ln);//对后续字符串切割
	string right_hx = houxv.substr(ln, rn);//我企鹅企鹅企鹅
	
	buildT(T->lchild, left_zx, left_hx);  //这里是建树所以先左子树再右子树,和之前题目不一样
	buildT(T->rchild, right_zx, right_hx);
}

void pp(Tree *T)
{
	if(T == nullptr) return;
	cout << T->data;
	pp(T->lchild);
	pp(T->rchild);
}

int main()
{
	string zhongxv, houxv; cin >> zhongxv >> houxv;
	Tr...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发