二叉树的层次遍历

二叉树的层次遍历

要实现二叉树的层次遍历,需要借助队列实现,这种方法也称为宽度优先遍历(Breadth-First Search, BFS)。
主要思想是,借助队列,先将根结点入队,开启循环,队列为空的时候循环结束,每一个结点出队时,就把该结点的左右子节点(如果存在)放进队列。

public class Trees {

    public static void main(String[] args) {
        TreeNode root = new TreeNode(5);
        TreeNode n4 = new TreeNode(4);
        TreeNode n8 = new TreeNode(8);
        TreeNode n11 = new TreeNode(11);
        TreeNode n13 = new TreeNode(13);
        TreeNode n3 = new TreeNode(3);
        root.left = n4;
        root.right = n8;
        n4.left = n11;
        n8.left = n13;
        n8.right = n3;
        ArrayList<Integer> list = printTree(root);
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }

    private static ArrayList<Integer> printTree(TreeNode root) {
        // 使用队列(BFS)实现二叉树的层次遍历
        ArrayList<Integer> list = new ArrayList<Integer>();// 存放层次遍历的结果序列
        Queue<TreeNode> queue = new LinkedList<TreeNode>();// 辅助队列

        if (root != null) {// 根结点入队
            queue.offer(root);
        }

        while (!queue.isEmpty()) {// 队列不为空,执行循环
            TreeNode node = queue.poll();
            list.add(node.val);// 将队列元素输出
            if (node.left != null) {// 如果该元素有左子结点,就把该子结点加入队列
                queue.offer(node.left);
            }
            if (node.right != null) {// 如果该元素有右子结点,就把该子结点加入队列
                queue.offer(node.right);
            }
        }

        return list;
    }

}

class TreeNode {
    int val;
    TreeNode left = null;
    TreeNode right = null;

    TreeNode(int val) {
        this.val = val;
    }
}

点赞