二叉树的层序遍历

层序遍历不是二叉树所特有的,但使用二叉树来讲解是因为在视觉和理解上更直观。顾名思议,按层遍历。如下图:

这里写图片描述

树的层序遍历对应到了图中的宽度优先搜索,需要使用一个队列辅助遍历过程,从图中也可以看出其遍历过程很符合队列的性质。

初始化一个空队列,我们让根节点入队,然后出队,查看出队节点的左孩子是否为空,非空的话,出队节点左孩子入队,查看出队节点的右孩子是否为空,非空的话,出队节点的右孩子入队。然后重复,直到队列大小为空。其实结合上图模拟下过程是很清晰的。

下面是代码

template<typename T>
void Tree<T>::Level_Order_Traverse(Tree_Node<T>* node)
{
    queue<Tree_Node<T>*> Visit_Queue;
    Tree_Node<T>* temp;
    assert(node == root);
    Visit_Queue.push(node);//根节点入队
    while (Visit_Queue.size())
    {
            //输出队头元素
            temp = Visit_Queue.front();
            cout << temp->data<< " ";
            //弹出队头元素
            Visit_Queue.pop();
            //左右节点非空入队
            if (temp->left_node != NULL) Visit_Queue.push(temp->left_node);
            if (temp->right_node != NULL) Visit_Queue.push(temp->right_node);
    }

}

层序遍历就到说到这里了。后面图的学习笔记会在探究泛化的宽度优先搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值