题目:
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
示例:
给定二叉树: [3,9,20,null,null,15,7],
输出:[[3],[20,9],[15,7]]
思路:
层序遍历的思想,只不过是单数层从左到右打印,偶数层从右往左打印。层层遍历。
代码:
public List<List<Integer>> levelorder(TreeNode root){
if(root == null){ return new ArrayList();}
boolean isdouble = false;
List<List<Integer>> node =new ArrayList();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(true){
int size = queue.size();
LinkedList<Integer> hw = new LinkedList<>();
for(int i =0;i<size;i++){
root = queue.poll();
if(isdouble) hw.addLast(root.val);
else hw.addFirst(root.val);
}
isdouble = !isdouble;
if(root.left!=null) queue.offer(root.left);
if(root.right!=null) queue.offer(root.right);
node.add(hw);
if(queue.isEmpty()) break;
}
return node;
}