算法 二叉树的层序遍历

1. 层序遍历

非递归方式

/**
 * 非递归 层序遍历 广度优先算法
 */
public static void bfsOrder2(TreeNode treeNode) {
    if (treeNode == null) {
        return;
    }
    LinkedList<TreeNode> linkedList = new LinkedList<>();
    linkedList.add(treeNode);
    while (!linkedList.isEmpty()) {
        TreeNode node = linkedList.poll();
        System.out.print(node.val);
        if (node.left != null) {
            linkedList.add(node.left);
        }
        if (node.right != null) {
            linkedList.add(node.right);
        }
    }
}

递归方式

/**
 * 层序遍历 
 */
public static void bfsOrder(TreeNode treeNode) {
    int maxDepth = maxDepth(treeNode);
    for (int i = 0; i < maxDepth; i++) {
        printLevel(treeNode, i);
    }
}

/**
 * 打印当前层
 */
private static void printLevel(TreeNode treeNode, int level) {
    if (treeNode == null) {
        return;
    }
    if (level == 0) {
        System.out.print(treeNode.val);
    } else {
        printLevel(treeNode.left, level - 1);
        printLevel(treeNode.right, level - 1);
    }
}

/**
 * 计算树的最大深度
 */
public static int maxDepth(TreeNode treeNode) {
    if (treeNode == null) {
        return 0;
    }
    int maxLeft = maxDepth(treeNode.left);
    int maxRight = maxDepth(treeNode.right);
    return Math.max(maxLeft, maxRight) + 1;
}

2. 实战

题目描述

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:给定的二叉树是{3,9,20,#,#,15,7},


image

该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]

示例1

输入:{1,2}
返回值:[[1],[2]]

示例2

输入:{1,2,3,4,#,#,5}
返回值:[[1],[2,3],[4,5]]

解答

/**
 * 层序遍历
 */
public ArrayList<ArrayList<Object>> levelOrder(TreeNode root) {
    ArrayList<ArrayList<Object>> res = new ArrayList<ArrayList<Object>>();
    if (root == null) {
        return res;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        int size = queue.size();
        ArrayList<Object> li = new ArrayList<>();
        while (size-- > 0) {
            TreeNode node = queue.poll();
            if (node == null) {
                continue;
            }
            li.add(node.val);
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
        res.add(li);
    }
    return res;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容