二叉树的数组实现

来源:互联网 发布:科比勤奋 知乎 编辑:程序博客网 时间:2024/05/29 14:06

书上大多是结构体+指针实现的,但在好多情况下数组的实现情况更多一些,于是我自己就想了一个用数组实现的二叉树,以及他的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");}
原创粉丝点击