首页 > 编程语言 >根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树

根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树

时间:2024-11-16 20:45:17浏览次数:1  
标签:int 中序 dfs po ino 二叉树 前序

L2-006 树的遍历

#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
int po[35];
int ino[35];
vector<int>ans[50];
 
 
int  dfs(int l1, int r1, int l2, int r2) {
	for (int i = l2; i <= r2; i++) {
		if (ino[i] == po[r1]) { 
			int root = po[r1]; 
 
			int lc = dfs(l1, l1 + i - l2 - 1, l2, i - 1) ; //递归左子树
			int rc = dfs(l1 + i - l2, r1 - 1, i + 1, r2) ; //递归右子树
			if (lc) ans[root].push_back(lc); //存进对应的根中
			if (rc) ans[root].push_back(rc);//同上
 
			return root;
		}
	}
	return 0;
 
 
}
 
 
void solve() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> po[i];
	for (int i = 1; i <= n; i++) cin >> ino[i];
	dfs(1, n, 1, n);
 
	queue<int>q;
	q.push(po[n]);
	cout << po[n];
	while (q.size()) {
		int t = q.front();
		q.pop();
		for (auto i : ans[t]) {
			q.push(i);
			cout << " " << i;
		}
 
 
	}
 
 
 
 
}
 
 
signed main() {
 
	int t = 1;
	// cin>>t;
	while (t--) solve();
 
	return 0;
}

标签:int,中序,dfs,po,ino,二叉树,前序
From: https://www.cnblogs.com/swjswjswj/p/18549799

相关文章

  • 二叉树Golang
    二叉树前言完全二叉树最底层节点按顺序从左到右排列。满二叉树一颗二叉树只有0度和2度的节点。二叉搜索树左子树上的所有节点的值均小于根节点的值。右子树上的所有节点的值均大于根节点的值。平衡二叉搜索树左右两个子树的高度差的绝对值不超过1。......
  • 力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)
    解题思路:方法一:递归(左中右)classSolution{List<Integer>res=newArrayList<>();publicList<Integer>inorderTraversal(TreeNoderoot){recur(root);returnres;}publicvoidrecur(TreeNoderoot){if(......
  • 114. 二叉树展开为链表
    题目链接解题思路:对于这类递归问题,采用「宏观」思考模式。对于任意一个节点A,左子树先「展开为链表」,右子树再「展开为链表」,然后A节点,将左子树的结果,和右子树的结果,「串在一起」即可。左子树展开为链表,所以要返回两个节点,一个是链表的头,然后是链表的尾。代码/***......
  • 617. 合并二叉树
    题目链接解题思路分情况讨论即可两个头都是空,直接返回空若root1为空,直接返回root2若roo2为空,直接返回root1若都不空,则二者相加,得到一个新节点A,然后二者的左子树去合并,得到一个新左子树new_left,二者的右子树去合并,得到一个新右子树new_right,然后新节点的左儿子就是new_......
  • 104. 二叉树的最大深度
    题目链接解题思路普通的递归可能很简单,但是,现在要求,使用「二叉树递归套路」来思考问题每个节点需要什么信息?如果根节点,能够有一个「最大深度」的信息,那么直接返回就可以了。那么,这个信息可以通过左子树信息+右子树信息得到吗?max(左子树最大深度,右子树最大深度)+1......
  • 102. 二叉树的层序遍历
    题目链接解题思路层序遍历就是用队列,本题需要一层一层收集答案,所以我们可以用一个变量cur,表示该层还剩多少节点需要收集,同时,遇到一个节点,还要将其孩子节点放入队尾。那么我们怎么知道下一层的节点个数,所以还需要一个变量next,记录下一层的节点个数。总结一遍:每次从队头......
  • LeetCode654.最大二叉树
    LeetCode刷题记录文章目录......
  • 根据前序中序求后序(树)
    题目描述给定一棵二叉树的前序遍历和中序遍历,求其后序遍历。输入读入2个两个字符串,每个一行,长度均小于等于26。 第一行为前序遍历,第二行为中序遍历。 二叉树中的结点名称以大写字母表示:A,B,C....。输出输出一行,为后序遍历的字符串。样例输入 ABCCBA样例输出  C......
  • 数据结构 ——— 利用前序序列重建链式二叉树
    目录题目要求链式二叉树示意图​编辑代码实现 题目要求读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树例如前序遍历的字符串为:ABC##DE#G##F###;其中"#"表示空树链式二叉树示意图以此图的链式二叉树为例子那么此链式二叉树前序遍历转换为字符......
  • 力扣—543.二叉树的直径
    543.二叉树的直径给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取......