洛谷P1305 新二叉树

P1305 新二叉树

题目描述

输入一串二叉树,输出其前序遍历。

输入格式

第一行为二叉树的节点数 \(n\)。(\(1 \leq n \leq 26\))

后面 \(n\) 行,第一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。

空节点用 * 表示。

输出格式

二叉树的前序遍历。

输入输出样例 #1

输入 #1

6
abc
bdi
cj*
d**
i**
j**

输出 #1

abdicj

P1305 新二叉树

此题的“新”在于把树的元素换成了字符,除了记录时需要对节点的编号dfs传递的参数及判断条件做一点调整外,其他就是普通的二叉树和前序遍历
那么废话不多说,上代码:

ACcode:

#include<bits/stdc++.h>
using namespace std;
const int N=30;
int n,root;
char tree[N][3]; //tree[id][0]存储id节点的字符,tree[id][1]存储id的“左儿子”,tree[id][2]存储id的“右儿子”
void dfs(int id){
	cout<<tree[id][0];
	if(tree[id][1]!='*') dfs(tree[id][1]-'a'+1); //注意这里传递到参数是字符在26字母表里的位置,而非字符本身!!!
	if(tree[id][2]!='*') dfs(tree[id][2]-'a'+1);
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		char fa,l,r;
		cin>>fa>>l>>r;
		int id_fa=fa-'a'+1; //节点是在26字母表中的位置
		if(i==1) root=id_fa; //记录根节点
		tree[id_fa][0]=fa,tree[id_fa][1]=l,tree[id_fa][2]=r;
	}
	dfs(root);
	return 0;
}
??Author::AAA_jiancaipifa
posted @ 2026-05-31 16:05  AAA_jiancaipifa  阅读(4)  评论(0)    收藏  举报