二叉树算法实战:新二叉树构建与遍历
一、新二叉树
题目
链接:新二叉树
算法原理
- 建树:和常规的链式存储方式一致。因为结点是字符,所以可以直接用 ASCII 码值当做下标来使用。比如 'a' 直接映射成 97,l[97] 里面就存着 'a' 的左儿子,r[97] 就存着 'a' 的右儿子,以此类推,建立二叉树。
- 先序遍历:根左右。
代码
#include <iostream>
using namespace std;
const int N = 300;
char l[N], r[N];
void dfs(char root) {
cout << root;
if (l[root] != '*') dfs(l[root]);
if (r[root] != '*') dfs(r[root]);
}
int main() {
int n;
cin >> n;
char root;
cin >> root;
cin >> l[root] >> r[root];
for (int i = 2; i <= n; i++) {
char u;
cin >> u;
cin >> l[u] >> r[u];
}
dfs(root);
return 0;
}
二、二叉树的遍历
题目
链接:二叉树的遍历
算法原理
仿照之前讲解二叉树的方式:建图 + DFS。
代码
#
std;
N = + ;
l[N], r[N];
{
cout << root << ;
(l[root]) (l[root]);
(r[root]) (r[root]);
}
{
(l[root]) (l[root]);
cout << root << ;
(r[root]) (r[root]);
}
{
(l[root]) (l[root]);
(r[root]) (r[root]);
cout << root << ;
}
{
n;
cin >> n;
( i = ; i <= n; i++) {
cin >> l[i] >> r[i];
}
();
cout << endl;
();
cout << endl;
();
cout << endl;
;
}


