I 层序遍历,输出为一个数组
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
Queue<TreeNode> queue = new LinkedList<>();
List<Integer> li=new ArrayList<>();
queue.add(root);
while(!queue.isEmpty())
{
TreeNode node=queue.poll();
li.add(node.val);
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
int[] ans=new int[li.size()];
for(int i=0;i<li.size();i++)
{
ans[i]=li.get(i);
}
return ans;
}
}
II 层序遍历,输出为二维数组
与第一题不同的是要设置一个中间数组,存储 每次的值
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> que=new LinkedList<>();
List<List<Integer>> li=new ArrayList<>();
if(root!=null) que.add(root);
while(!que.isEmpty())
{ List<Integer> tmp=new LinkedList<>();
for(int i=que.size();i>0;i--)
{
TreeNode node=que.poll();
tmp.add(node.val);
if(node.left!=null) que.add(node.left);
if(node.right!=null) que.add(node.right);
}
li.add(tmp);
}
return li;
}
}
III 之字形输出
与第II题不同的是,中间数组要用双端队列,既可以用addLast ,也可以用addFirst,并且根据层数的奇偶用不同的添加元素的方法。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> que=new LinkedList<>();
List<List<Integer>> li=new ArrayList<>();
if(root!=null) que.add(root);
while(!que.isEmpty())
{ //List<Integer> tmp=new LinkedList<>();
LinkedList<Integer> tmp = new LinkedList<>();
for(int i=que.size();i>0;i--)
{
TreeNode node=que.poll();
if(li.size()%2==0) tmp.addLast(node.val);
else tmp.addFirst(node.val);
if(node.left!=null) que.add(node.left);
if(node.right!=null) que.add(node.right);
}
li.add(tmp);
}
return li;
}
}