我是靠谱客的博主 沉默枫叶,最近开发中收集的这篇文章主要介绍剑指offer-BFS剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- [剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/)
- [剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/)
- [剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com)](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/)
剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)
-
思路1:把每一层的信息记录下来,
List<List<Integer>>
,然后再转换为一维数组。与hoot100的102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)一样。 -
代码:
class Solution { public int[] levelOrder(TreeNode root) { List<List<Integer>> resList = new LinkedList<>(); if(root == null){ return new int[0]; } Deque<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ int size = queue.size(); List<Integer> levelList = new LinkedList<>(); for(int i = 0; i < size; i++){ TreeNode node = queue.poll(); levelList.add(node.val); if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } } resList.add(levelList); } int count = 0; for(List<Integer> list: resList){ count += list.size(); } int idx = 0; int[] res = new int[count]; for(int i = 0; i < resList.size(); i++){ for(int j = 0; j < resList.get(i).size(); j++){ res[idx++] = resList.get(i).get(j); } } return res; } }
-
思路2:直接进行不需要单独记录每层的节点信息,直接添加。
-
代码
class Solution { public int[] levelOrder(TreeNode root) { if(root == null){ return new int[0]; } Deque<TreeNode> queue = new LinkedList<>(); List<Integer> res = new ArrayList<>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode node = queue.poll(); res.add(node.val); if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } } int[] ans = new int[res.size()]; for(int i = 0; i < res.size(); i++){ ans[i] = res.get(i); } return ans; } }
剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)
-
思路:和上一题完全一致,采用思路一即可。
-
代码:
剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com)
-
思路:使用一个变量记录是否需要转向。每次遍历完一层之后,转向改变。
-
代码:
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new LinkedList<>(); Deque<TreeNode> queue = new LinkedList<>(); if(root == null){ return res; } queue.offer(root); boolean flag = true; while(!queue.isEmpty()){ Deque<Integer> level = new LinkedList<>(); int size = queue.size(); for(int i = 0; i < size; i++){ TreeNode node = queue.poll(); if(flag){ level.offerLast(node.val); }else { level.offerFirst(node.val); } if(node.left != null){ queue.offer(node.left); } if(node.right != null){ queue.offer(node.right); } } flag = !flag; res.add(new LinkedList<>(level)); } return res; } }
最后
以上就是沉默枫叶为你收集整理的剑指offer-BFS剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com)的全部内容,希望文章能够帮你解决剑指offer-BFS剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode) (leetcode-cn.com)剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复