树:
树实体结构:
@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();}}}}
}
输出结果: