给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
AC的代码(Java版):
import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } public class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> answer = new ArrayList<>(); if (root == null) return answer; LinkedList<TreeNode> treeNodes = new LinkedList<>(); treeNodes.add(root); while (!treeNodes.isEmpty()) { int levelSize = treeNodes.size(); ArrayList<Integer> levelValues = new ArrayList<>(); for (int i = 0; i < levelSize; i++) { TreeNode currentNode = treeNodes.poll(); //get and remove the first one levelValues.add(currentNode.val); if (currentNode.left != null) treeNodes.add(currentNode.left); //add to the end if (currentNode.right != null) treeNodes.add(currentNode.right); } answer.add(levelValues); //遍历完一层 } return answer; } public static void printAnswer(ArrayList<ArrayList<Integer>> answer) { int rowSum = answer.size(); for(int rowIndex = 0; rowIndex < rowSum; rowIndex++) { System.out.println(Arrays.toString(answer.get(rowIndex).toArray())); } } public static void main(String[] args) { TreeNode node5 = new TreeNode(5, null, null); TreeNode node4 = new TreeNode(4, null, null); TreeNode node3 = new TreeNode(3, node4, node5); TreeNode node2 = new TreeNode(2, null, null); TreeNode node1 = new TreeNode(1, node2, node3); printAnswer(new Solution().levelOrder(node1)); } }