剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
[3,9,20,15,7]
LinkedList<TreeNode> list=new LinkedList<>();
LinkedList<Integer> res=new LinkedList<>();
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
list.offer(root);
while(!list.isEmpty()){
TreeNode temp=list.poll();
res.add(temp.val);
if(temp.left!=null) list.offer(temp.left);
if(temp.right!=null) list.offer(temp.right);
}
int i=0;
int nums[]=new int[res.size()];
for(int x:res)
nums[i++]=x;
return nums;
}
- 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
[
[3],
[9,20],
[15,7]
]
Queue<TreeNode> q=new LinkedList<>();
List<List<Integer>> res=new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null) return res;
q.offer(root);
while(!q.isEmpty()){
List<Integer> list=new LinkedList<>();
int n=q.size();
for(int i=0;i<n;i++){
TreeNode temp=q.poll();
list.add(temp.val);
if(temp.left!=null) q.offer(temp.left);
if(temp.right!=null) q.offer(temp.right);
}
res.add(list);
}
return res;
}
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
[
[3],
[20,9],
[15,7]
]
LinkedList<TreeNode> q=new LinkedList<>();
LinkedList<List<Integer>> res=new LinkedList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null) return res;
q.add(root);
while(!q.isEmpty()){
LinkedList<Integer> list=new LinkedList<>();
int n=q.size();
for(int i=0;i<n;i++){
TreeNode temp=q.poll();
int count=res.size();
if(count%2==0)
list.addLast(temp.val);
else
list.addFirst(temp.val);
if(temp.left!=null) q.offer(temp.left);
if(temp.right!=null) q.offer(temp.right);
}
res.add(list);
}
return res;
}