题目 | 您所在的位置:网站首页 › 前序格式 › 题目 |
题目描述
输入一串二叉树,用遍历前序打出。 输入输出格式 输入格式:第一行为二叉树的节点数n。(n \leq 26n≤26 ) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子。 空节点用*表示 输出格式: 前序排列的二叉树 输入输出样例 输入样例#1: 复制 6 abc bdi cj* d** i** j** 输出样例#1: 复制 abdicj解题思路:一开始准备用结构体表示树,内含双向指针,然后遇到了bug,首先是结构体运用不熟,没搞懂指针指向自定义类型的定义方法,然后就有父亲,儿子双向指针的繁琐,最后又在前序输出这个类似于dfs的输出方法没转过来怎么传送指针指向的内容,卒,,参看大佬题解,才明白思路一样代码也会差好多,1,以Int型代替char型,数组的下标一下子就简洁了,然后节点较简单,可以不用指针而直接存储,最后前序输出时也贼方便; AC.1:(包含错误代码以示衬托) #include #include #include using namespace std; struct tree { int le,ri,fa; }T[30]; int n,root; string c; void visit(int k) { char ch = k + 96; printf("%c",ch); if(T[k].le!=0) visit(T[k].le); if(T[k].ri!=0) visit(T[k].ri); } int main() { cin>>n; for(int i=1;i>c; if(c[1]!='*') { T[c[0]-96].le = c[1]-96; T[c[1]-96].fa = c[0]-96; } if(c[2]!='*') { T[c[0]-96].ri = c[2]-96; T[c[2]-96].fa = c[0]-96; } } for(int i=1;i>t; // char s[4],begain; // for(int i=1;i>s; // if() trees[s[0]].x=s[0]; if(trees[s[1]].fa!=NULL)// trees[s[1]].fa=&trees[s[0]]; if(trees[s[2]].fa!=NULL) trees[s[2]].fa=&trees[s[0]]; if(s[1]!='*') trees[s[0]].lson=&trees[s[1]]; if(s[2]!='*') trees[s[0]].rson=&trees[s[2]]; } for(int i=97;i |
CopyRight 2018-2019 实验室设备网 版权所有 |