本文共 1754 字,大约阅读时间需要 5 分钟。
目录
采用广度优先搜索(BFS)的方法,利用队列的先进先出特性遍历树节点。
import java.util.*; public class Solution { public List levelOrder(TreeNode root) { List res = new LinkedList<>(); if (root == null) { return res; } Deque queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { List level = new LinkedList<>(); int size = queue.size(); while (size > 0) { TreeNode node = queue.poll(); level.add(node.val); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } size--; } res.add(level); } return res; } } 该方法的时间复杂度为O(N),因为每个节点只会被访问一次。空间复杂度同样为O(N),因为在最坏情况下队列会保存所有节点。
采用深度优先搜索(DFS)的方法,递归地遍历树节点,并将每一层的节点值按层存储。
import java.util.*; public class Solution { public List levelOrder(TreeNode root) { List res = new LinkedList<>(); if (root == null) { return res; } dfs(1, res, root); return res; } private void dfs(int index, List res, TreeNode root) { if (root == null) { return; } if (res.size() < index) { res.add(new LinkedList<>()); } res.get(index - 1).add(root.val); dfs(index + 1, res, root.left); dfs(index + 1, res, root.right); } } 该方法的时间复杂度也是O(N),因为每个节点都会被访问一次。空间复杂度为O(h),其中h为树的高度,这是因为递归过程中每一层都需要存储当前层的节点值。
转载地址:http://lspyz.baihongyu.com/