二叉树按层遍历输出——双指针法(图解)

(一)申请一个vector的容器vt。
(二)设置两个指针(当然,不是必须是指针形式的指针,可以用数组的下标代替,只是采用指针这个思想),这两个指针一个指向当前访问的节点——cur(标志目前访问的是哪个节点),另外一个指向当前层访问节点的最后一个节点——end(标志当前层访问结束)。
(三)对两个指针的初始化:首先在根节点不为NULL的情况下,将根节点装入容器,然后cur从0开始,end等于容器的长度(即end=1)。

这里写图片描述

(四)过程进行时

这里写图片描述

(五)代码

void print_tree(tree *root)
{
    vector<tree*> vt;
    int cur = 0, end = 0;
    vt.push_back(root);
    while (cur<vt.size())
    {
        end = vt.size();
        while(cur<end)
        {
            printf("%c ", vt[cur]->date);//输出根节点的值
            if (vt[cur]->lchild)
                vt.push_back(vt[cur]->lchild);
//将左孩子加入,以便下一次循环访问
            if (vt[cur]->rchild)
                vt.push_back(vt[cur]->rchild);
//将右孩子加入,以便下一次循环访问

            cur++;
        }
        printf("\n");
    }

}

(六)结果图

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值