原题: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
一、题目要求
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层序遍历结果:
[ [3], [9,20], [15,7] ]
二、解题
package com.leetcode.test.tree;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Solution14 {
public static void main(String[] args) {
TreeNode a1 = new TreeNode(3);
TreeNode a2 = new TreeNode(9);
TreeNode a3 = new TreeNode(20);
TreeNode a4 = new TreeNode(15);
TreeNode a5 = new TreeNode(7);
a1.left = a2;
a1.right = a3;
a3.left = a4;
a3.right = a5;
levelOrder(a1);
}
/**
* 按照先序遍历的方式遍历一遍二叉树
* 将所有的节点的值存入TreeMap中,key的值是当前节点的层数
* 然后遍历TreeMap,将内容存入List中,然后返回
* @param root
* @return
*/
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList();
Map<Integer, List<Integer>> map = new TreeMap();
levelOrder2(root, map, 1);
//遍历TreeMap,将内存存入List中
for (Map.Entry<Integer, List<Integer>> entry:map.entrySet()) {
list.add(entry.getValue());
}
return list;
}
/**
* 按照先序遍历的方式遍历一遍二叉树
* 将所有的节点的值存入TreeMap中,key的值是当前节点的层数
* @param root
* @param map
* @param level
*/
public static void levelOrder2(TreeNode root, Map<Integer, List<Integer>> map, int level) {
if (root == null) return;
List<Integer> list = map.get(level);
if (list == null) {
list = new ArrayList();
} else {
list = map.get(level);
}
list.add(root.val);
map.put(level, list);
levelOrder2(root.left, map, level + 1);
levelOrder2(root.right, map, level + 1);
}
}
三、运行结果
四、提交结果
嗯... 时间和空间复杂度都不咋地~~
不管了,做出来就行