题目描述:
输入一串二叉树,输出其前序遍历。
输入:第一行为二叉树的节点数 n。(1≤n≤26)
后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用
*
表示
输出:二叉树的前序遍历。
案例:
输入:6 abc bdi cj* d** i** j** 输出:abdicj
解题思路:
1、每次只知道树的一小部分,而且在操作中每次出现的结点没有固定规律,必须有在树中对结点的查找操作,所以要用数组 存储这棵二叉树;建立两个数组l[]和r[],其中对应的元素分别表示左右结点;定义变量root作为这棵树的树根,依次输入n行,把输入信息填入数组,并求确定root。
2、使用递归先序遍历这棵树,结束添加为字符为*。
代码实现:
#include <iostream>
using namespace std;
int root;
int l[26], r[26];
void DLR(const int& i)
{
if (i == '*' - 'a') //返回条件:遇到无效结点
{
return;
}
cout << char(i + 'a');
DLR(l[i]);
DLR(r[i]);
}
int main()
{
int n = 0;
string s;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
if (!i)
{
root = s[0] - 'a';
}
l[s[0] - 'a'] = s[1] - 'a';
r[s[0] - 'a'] = s[2] - 'a';
}
DLR(root);
cout << endl;
return 0;
}
版权声明:本文为qq_48988844原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。