二叉树的层序遍历
题目介绍
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
返回其层序遍历结果:
题目解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| package algorithm;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class BinaryTreeLevelOrderTraversal {
static Map<Integer, List<Integer>> map = new HashMap<>();
public static List<List<Integer>> levelOrder(TreeNode root) {
union(root, 0); List<List<Integer>> ans = new ArrayList<>(); for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) { List<Integer> value = entry.getValue(); ans.add(value); } return ans; }
private static void union(TreeNode root, int count) { if (root == null) { return; } if (map.get(count) == null) { List<Integer> list = new ArrayList<>(); list.add(root.val); map.put(count, list); } else { List<Integer> list = map.get(count); list.add(root.val); } union(root.left, count + 1); union(root.right, count + 1); }
public static void main(String[] args) { TreeNode n1 = new TreeNode(3); TreeNode n2 = new TreeNode(9); n1.left = n2; TreeNode n3 = new TreeNode(20); n1.right = n3; TreeNode n4 = new TreeNode(15); n3.left =n4; TreeNode n5 = new TreeNode(7); n3.right = n5;
List<List<Integer>> lists = levelOrder(n1); for (List<Integer> list : lists) { for (Integer integer : list) { System.out.print(integer + " "); } System.out.println(); }
}
public static class TreeNode { int val; TreeNode left; TreeNode right;
TreeNode() { }
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } }
|
打印:
思路:
思路上,很简单了,就是增加深度这个维度,最后统计出来。