二叉树的层次遍历
问题描述:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
解题思路:
定义变量list,List<List<Integer>> list = new LinkedList<List<Integer>>();
list用于存储二叉树的每一层及该层对应的节点值。
对于二叉树中每个节点node,需要得到节点所在的层数level。
根据节点所在层数level,将节点值添加至list中相应的层数。
实现代码如下:
// list存储每层的遍历结果 // list包含树的每个层,每一层又包含该层各个节点的值 private static List<List<Integer>> list = new LinkedList<List<Integer>>(); private static void test(TreeNode node, int level) { if (node == null) return; // 若list中已包含节点node的层数level,则直接将node的值添加至该层 if (level < list.size()) list.get(level).add(node.val); // 若list中没有节点node的层数level,list添加新层,并将节点node的值添加至该层。 else { list.add(new LinkedList<Integer>()); list.get(level).add(node.val); } // node的左右子节点,其子节点层数比其多1 test(node.left, level+1); test(node.right, level+1); } public static List<List<Integer>> levelOrder(TreeNode root) { test(root, 0); return list; }
posted on 2018-07-10 19:43 Deltadeblog 阅读(2180) 评论(0) 编辑 收藏 举报