二叉树的层序遍历

来源:互联网 发布:什么叫大数据金融 编辑:程序博客网 时间:2024/06/05 18:25

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

这里写图片描述

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

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

下面是代码

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);    }}

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

0 0
原创粉丝点击