层序遍历
Meteor
2023-05-31 22:16:32
Categories:
算法
Tags:
层序遍历
102 二叉树的层序遍历
解题思路1
迭代法:使用队列保存每一层的节点,然后将一层的节点陆续出队,节点值添加到list中,将子节点中非空节点加入到队尾,遍历完一层节点后,将list加入到结果中。
代码
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if(root==null) return res; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ List<Integer> list = new ArrayList<>(); int size = queue.size(); TreeNode node; for(int i = 0; i < size; i++){ node = queue.poll(); if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); list.add(node.val); } res.add(list); } return res; } }
|
解题思路2
递归法:由于每一层的节点在最终的结果res中的索引是固定的,因此只需要根据当前节点所在的深度将其添加到对应的list中即可。
代码
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); dfs(res, 0, root); return res; } public void dfs(List<List<Integer>> res, int level, TreeNode root){ if(root==null) return; if(level==res.size()){ res.add(new ArrayList<>()); } res.get(level).add(root.val); dfs(res, level+1, root.left); dfs(res, level+1, root.right); } }
|
总结
层序遍历并不一定要按照一层一层的顺序依次向下遍历,也可以按照中序的顺序进行dfs。