问题1:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
二叉树的广度优先搜索 用队列进行实现 每次扫描到节点将其 插入队列中然后输出
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int[] levelOrder(TreeNode root) {if(root == null) return new int[0];Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};ArrayList<Integer> ans = new ArrayList<>();while(!queue.isEmpty()) {TreeNode node = queue.poll();ans.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}int[] res = new int[ans.size()];for(int i = 0; i < ans.size(); i++)res[i] = ans.get(i);return res;}}延续上一题的做法的同时加入 限制 每层打印 难点// for(int i = 0 ; i < queue.size() ; i++ ){ 是错的 因为queue.size是变量不能 作为判断条件 但是一开始就取得作为初始条件就好例如:给定二叉树: [3,9,20,null,null,15,7],
问题2:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
延续上一题的做法的同时加入 限制 每层打印 难点
// for(int i = 0 ; i < queue.size() ; i++ ){ 是错的 因为queue.size是变量不能 作为判断条件 但是一开始就取得作为初始条件就好
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list =new ArrayList<>();if(root==null)return list;Queue <TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){List <Integer> list1 = new ArrayList<>();// for(int i = 0 ; i < queue.size() ; i++ ){ 是错的 因为queue.size是变量不能 作为判断条件 但是一开始就取得作为初始条件就好for(int i = queue.size(); i > 0; i--) {TreeNode t = queue.poll();list1.add(t.val);if(t.left!= null)queue.add(t.left);if(t.right!=null)queue.add(t.right);}list.add(list1);}return list;}}
问题3:
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
从第一层开始记录 CNT =1 第二层 CNT=2 然后 调用Collections.reverse()进行翻转
例如:
给定二叉树: [3,9,20,null,null,15,7],
3<br /> / \<br /> 9 20<br /> / \<br /> 15 7
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list = new ArrayList<>();if(root==null) return list;Queue < TreeNode> queue =new LinkedList<>();queue.offer(root);int cnt =0;while(!queue.isEmpty()){List<Integer> list1 = new ArrayList<>();for(int i = queue.size() ; i>0 ;i--){TreeNode t = queue.poll();list1.add(t.val);if(t.left != null) queue.offer(t.left);if(t.right != null) queue.offer(t.right);}cnt++;if(cnt%2==0){Collections.reverse(list1);}list.add(list1);}return list;}}
问题4:
