树:
树实体结构:
@Data
public class Tree {
//树的data值
private String dataStr;
//树的第一个孩子节点
private Tree firstChild;
//树的下一个孩子节点
private Tree nextBrother;
}
代码实现:
public class TreeTraversal {
//队列,先进先出
private static ConcurrentLinkedQueue<Tree> queue = new ConcurrentLinkedQueue<>();
//初始化树结构
private static Tree G = new Tree("G", null, null);
private static Tree F = new Tree("F", null, G);
private static Tree E = new Tree("E", null, null);
private static Tree D = new Tree("D", null, null);
private static Tree C = new Tree("C", F, D);
private static Tree B = new Tree("B", E, C);
private static Tree A = new Tree("A", B, null);
public static void main(String[] args) {
TreeTraversal(A);
}
//层序遍历
public static void TreeTraversal(Tree root) {
Tree pTree;//父节点
Tree broTree;//兄弟节点
//A 根节点及其兄弟节点放入队列
queue.add(root);
while (null != root.getNextBrother()) {
queue.add(root.getNextBrother());
root = root.getNextBrother();
}
while (!queue.isEmpty()) {
//队列不为空,取出头节点 作为父节点
pTree = queue.poll();
System.out.println(pTree.getDataStr());
//如果当前 父节点 有子节点 ,将子节点放入队列
if(null!=pTree.getFirstChild()){
queue.add(pTree.getFirstChild());
//如果当前父节点 的子节点 有兄弟节点 ,将兄弟节点放入队列
broTree = pTree.getFirstChild().getNextBrother();
while (null != broTree) {
queue.add(broTree);
broTree = broTree.getNextBrother();
}
}
}
}
}
输出结果: