书上大多是结构体+指针实现的,但在好多情况下数组的实现情况更多一些,于是我自己就想了一个用数组实现的二叉树,以及他的dfs和bfs。
其中有的代码我没实现,只是有个轮廓。
创建还是用的递归,在输出时,第一次注释的地方用的i*2和i*2+1,并用递归实现循环,但不能控制结束,应该加一个m标识输出数。第一个分割线的部分我用的就是直接输出数组,第二个分割线的部分我用的中序遍历。代码还有不成熟的部分,就在创建的地方我用的0作为支点为null。
#include<iostream>
#include<string.h>
using namespace std;
int i = 1,m=0;
void creat(int a[],int i) {
int n; cin >> n;
if (n) {
a[i] = n; m++;
creat(a, i * 2);
creat(a, i * 2 + 1);
}
else return;
}
void print(int a[],int i) {
/*if (i == 1)cout << a[i] << " ";
if (a[i * 2]) {
if (a[i * 2 + 1]) {
cout << a[i * 2] << " " << a[i * 2 + 1] << " ";
print(a, i+1);
}
else {
cout << a[i * 2] << " ";
print(a, i+1);
}
}
if (a[i * 2 + 1]) {
if (!a[i * 2]) {
cout << a[i * 2 + 1] << " ";
print(a, i + 1);
}
}
return print(a, i);
*/
//----------------------------------------
for (int i = 0;; i++) {
if (m) {
if (a[i]) {
cout << a[i] << " ";
m--;
}
}
else break;
}
//------------------------------
if (a[i]) {
print(a, i * 2);
cout << a[i];
print(a, i * 2 + 1);
}
else return;
}
int main(void) {
int a[100];
memset(a, 0, sizeof(a));
creat(a, i);
print(a,1);
system("pause");
}