开发中常见的算法汇总之-树的层序遍历

版权声明:原创文章 https://blog.csdn.net/cpongo5/article/details/90169225
#### 树的层次遍历 - 核心思想 - 按照树结构由上往下逐层依次进行遍历 - 特性 - 需借助队列来存储节点,对节点进行入队出队操作 - 树中最短路径可以通过层序遍历求得(离根节点距离最近的子节点) - 步骤 - 构造一个存储节点的队列 - 将树的根节点入队列 - 循环从队列中取出节点,如果取出节点左子节点存在则将左子节点入队列,如果右子节点存在则将右子节点入队列 - 图解 006tNc79gy1g2q7zes94ng30go0c33z6.gif - 示例 ```java package com.lyd.algorithm.search; import com.lyd.datastructure.tree.RedBlackTree; import java.util.LinkedList; import java.util.Queue; /** * 描述:树的遍历 *

* #层序遍历 *

* * @author lyd Date 2019-04-28 ProjectName:datastructure-algo Version: 1.0 */ public class TreeSearch> { /** * 层次遍历 * * @param node 根节点 */ void levelTraversal(RedBlackTree.Node node) { if (null == node) { return; } //构造一个队列 Queue> queue = new LinkedList<>(); //根节点入队列 queue.offer(node); //每一层最后一个节点 RedBlackTree.Node layerEndNode = node; //每层最右节点 RedBlackTree.Node last = node; //队列不空则取出数据 while (!queue.isEmpty()) { RedBlackTree.Node data = queue.poll(); //当前取出的节点有左子节点则加入队列 if (null != data.getLeft()) { queue.offer(data.getLeft()); layerEndNode = data.getLeft(); } //当前取出的节点有右子节点则加入队列 if (null != data.getRight()) { queue.offer(data.getRight()); layerEndNode = data.getRight(); } if (last == data) { last = layerEndNode; System.out.println(data.getValue() + "\t"); } else { System.out.print(data.getValue() + "\t"); } } } public static void main(String[] args) { TreeSearch treeSearch = new TreeSearch<>(); RedBlackTree redBlackTree = new RedBlackTree<>(); for (int i = 1; i <= 10; i++) { redBlackTree.put(i); } System.out.println(redBlackTree); treeSearch.levelTraversal(redBlackTree.getRoot()); } } ```

猜你喜欢

转载自blog.csdn.net/cpongo5/article/details/90169225
今日推荐