洛谷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

浙公网安备 33010602011771号