美文网首页
LeetCode二叉树层次遍历

LeetCode二叉树层次遍历

作者: lingmacker | 来源:发表于2018-11-25 17:35 被阅读0次

给定二叉树,按照层次去遍历其每一个节点:

//层次遍历
public class LevelOrder {
    
    //主要实现
    public List<List<Integer>> levelOrder(TreeNode root) {
        //用来保存遍历顺序的集合,每一层用一个集合保存
        List<List<Integer>> res = new ArrayList<>();
        //用来保存每一层节点
        ArrayList<TreeNode> btList = new ArrayList<TreeNode>();
        //根节点入列
        if (root != null)
            btList.add(root);
        //如果节点的集合不为空,遍历节点
        while (!btList.isEmpty()) {
            //用于保存该层的节点的数值
            List<Integer> list = new ArrayList<>();
            
            //用于保存下一层的节点
            ArrayList<TreeNode> temp = new ArrayList<TreeNode>();
            //遍历节点,将数值保存到一个List中
            for (TreeNode t : btList) {
                list.add(t.val);
                //先将该节点的左节点保存到temp中
                if (t.left != null) {
                    temp.add(t.left);
                }
                //再将右节点保存到temp中
                if (t.right != null) {
                    temp.add(t.right);
                }
            }
            //遍历完成后,将遍历得到的数据集合添加到res
            res.add(list);
            //将btList清空
            btList.clear();
            //将下一层的节点添加到btList,继续遍历
            btList.addAll(temp);
        }
        return res;
    }
    
}

​ 2018.11.25

​ 粗略记录二叉树层次遍历,以便不忘记!

相关文章

网友评论

      本文标题:LeetCode二叉树层次遍历

      本文链接:https://www.haomeiwen.com/subject/trapqqtx.html