二叉树的层序遍历

xiaoxiao2021-02-28  111

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

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

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

下面是代码

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

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

转载请注明原文地址: https://www.6miu.com/read-52043.html

最新回复(0)