算法004:二叉树安层遍历、水平打印、广度优先遍历、宽度优先

196 阅读2分钟
题目:
二叉树,广度优先遍历:结果1234567

思路:
1  节点1进队,节点1出队,访问节点1
2  节点1的孩子节点2进队,节点3进队
3  节点2出队,访问节点2,节点2的孩子节点4进队,节点5进队
4  节点3出队,访问节点3,节点3的孩子节点6进队,节点7进队
5  节点4出队,访问节点4,节点4没有孩子节点
6  节点5出队,访问节点5,节点5没有孩子节点
7  节点6出队,访问节点6,节点6没有孩子节点
8  节点7出队,访问节点7,节点7没有孩子节点,结束

在这里插入图片描述

1.代码如下:

1.1TreeNode .java

package com.yuhl.right.tree1;

/**
 * @author yuhl
 * @Date 2020/10/24 21:20
 * @Classname TreeNode
 * @Description 二叉树的数据结构
 * 数据、左节点、右节点
 */
public class TreeNode {
    int data;
    TreeNode leftNode;
    TreeNode rightNode;
    public TreeNode() {

    }
    public TreeNode(int d) {
        data=d;
    }

    public TreeNode(TreeNode left,int d,TreeNode right) {
        leftNode=left;
        rightNode=right;
        data=d;
    }
}

1.2TreeNodeTest.java

package com.yuhl.right.tree1;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author yuhl
 * @Date 2020/10/24 21:28
 * @Classname TreeNodeTest
 * @Description 广度优先遍历、宽度优先、水平打印 使用队列结构
思路:
1  节点1进队,节点1出队,访问节点1
2  节点1的孩子节点2进队,节点3进队
3  节点2出队,访问节点2,节点2的孩子节点4进队,节点5进队
4  节点3出队,访问节点3,节点3的孩子节点6进队,节点7进队
5  节点4出队,访问节点4,节点4没有孩子节点
6  节点5出队,访问节点5,节点5没有孩子节点
7  节点6出队,访问节点6,节点6没有孩子节点
8  节点7出队,访问节点7,节点7没有孩子节点,结束
 */
public class TreeNodeTest {

    public static void main(String[] args) {
        TreeNode node7=new TreeNode(7);
        TreeNode node6=new TreeNode(6);
        TreeNode node5=new TreeNode(5);
        TreeNode node4=new TreeNode(4);
        TreeNode node3=new TreeNode(node6,3,node7);
        TreeNode node2=new TreeNode(node4,2,node5);
        TreeNode head=new TreeNode(node2,1,node3);

        System.out.print("广度优先遍历结果:");
        broadFirstSearch(head);
    }

    /**
     *  广度优先遍历是使用队列实现的LinkedList 是Queue的子类
     */

    public static void broadFirstSearch(TreeNode nodeHead) {
        if(nodeHead==null) {
            return;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(nodeHead);
        while(!queue.isEmpty()) {
            TreeNode node=queue.poll();
            System.out.print(node.data+" ");//打印
            if(null!=node.leftNode) {
                queue.add(node.leftNode);
            }
            if(null!=node.rightNode) {
                queue.add(node.rightNode);
            }

        }
    }
}

2.执行结果:

广度优先遍历结果:1 2 3 4 5 6 7