菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
91
0

剑指Offer(Java版)第六十三题:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

原创
05/13 14:22
阅读数 74593

/*
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,
第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
*/

import java.util.*;

public class Class63 {

public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;
}
}

public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot){
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
if(pRoot == null){
return result;
}
queue.addLast(null);
queue.addLast(pRoot);
boolean leftToRight = true;
while(queue.size() != 1){
TreeNode node = queue.removeFirst();
if(node == null){
//使用一个迭代器
Iterator<TreeNode> iter = null;
if(leftToRight){
iter = queue.iterator();
}else{
iter = queue.descendingIterator();
}
leftToRight = !leftToRight;
while(iter.hasNext()){
TreeNode temp = (TreeNode)iter.next();
list.add(temp.val);
}
result.add(new ArrayList<Integer>(list)); //为了防止指向同一个list
list.clear();
queue.addLast(null);
continue;
}
if(node.left != null){
queue.addLast(node.left);
}
if(node.right != null){
queue.addLast(node.right);
}
}
return result;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

发表评论

0/200
91 点赞
0 评论
收藏