构建完全二叉树存储整型数组(c++)

一,构建节点(所有代码附在最后)
节点中包含当前节点的值和左孩子节点和右孩子节点

typedef struct node{
    struct node* parent;
    int i;
    struct node* right_children;
    struct node* left_children;
}NODE;

初始化节点:

NODE* new_node(NODE* parent){
    NODE* temp = new NODE();
    if(temp == NULL ){
        cout<<"NODE error"<<endl;
    }
    temp->parent = parent;
    temp->i=NULL;
    temp->right_children=NULL;
    temp->left_children=NULL;
    return temp;
}

二,算法设计
由于二叉树存储数组时难以计算每个叶子节点的深度,故采用广度优先算法:
首先,将根节点压入队列
然后,在for循环中(循环次数为数组的长度),每次pop队列获得NODE节点(parent),设置完该节点的值后,初始化两个新的NODE节点(children)作为parent节点的左右孩子,并按照左孩子,右孩子的顺序压入到队列中。
最后,销毁队列。
①队列的初始化,pop,push,free代码:

QUEUE* new_queue(int length){  //新建队列
    QUEUE *queue_tmp = new QUEUE();
    if(queue_tmp == NULL){
        cout<<"内存分配失败"<<endl;
    }
    queue_tmp->node_list = new NODE*[length];
    if(queue_tmp->node_list == NULL){
        cout<<"内存分配失败"<<endl;
    }
    queue_tmp->top = 0;
    queue_tmp->max_length=length;
    queue_tmp->bottom = 0;
    return queue_tmp;
}
void push_queue(QUEUE *q,NODE *n){ // 压入队列
    if((q->top+1)%(q->max_length+1) == q->bottom)
        return;
    q->node_list[q->top] = n;
    q->top = (q->top+1)%(q->max_length+1);
}
NODE* pop_queue(QUEUE *q){ // 从队列中取出
    if(q->bottom == q->top)
        return NULL;
    NODE *temp = q->node_list[q-
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值