通过数组构建二叉树&遍历

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>

using namespace std;


struct Node {
    int data;
    Node *lchild, *rchild;
    Node () {
        lchild = rchild = NULL;
    }
};

void Build(Node *&T, int u, int arr[], int len) { // T是指针的引用
    if (u > len || arr[u] == -1)  {
        return;
    }
    T = new Node();
    T->data = arr[u];
    Build(T->lchild, u*2, arr, len);
    Build(T->rchild, u*2+1, arr, len);
}
void Bfs(Node *T) { // 层序遍历
    queue<Node*> Q;
    Q.push(T);

    while (!Q.empty()) {
        Node *t = Q.front();Q.pop();
        printf("%d ", t->data);
        if (t->lchild != NULL) Q.push(t->lchild);
        if (t->rchild != NULL) Q.push(t->rchild);
    }
}
void PreOrder(Node *T) {
    if (T == NULL) return;
    printf("%d ", T->data); // 先根
    PreOrder(T->lchild);
    PreOrder(T->rchild);
}
int main() {
    int a[100], n = 10;
    Node *root;
    for (int i=1;i<=n;i++) {
        a[i] = i;
    }
    // a[3] = -1; // -1表示空
    Build(root, 1, a, n);

    Bfs(root);
    // PreOrder(root);


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值