您的位置:首页 > 其它

按之字形顺序打印二叉树

2018-03-11 20:41 239 查看
package com.niuke;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

/**
* Created by admin on 2018/3/11.
*/
public class PrintZ {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> alist=new ArrayList<>();//Z型结果放入其中
ArrayList<Integer> list=new ArrayList<>();
LinkedList<TreeNode> queue=new LinkedList<>();
if(pRoot==null) {//代码的鲁棒性
return alist;
}
queue.addLast(null);//作为层分隔符   标记
queue.addLast(pRoot);//将头节点加入到队列中
boolean flag=true;//true为从左向右   false为从右向左
while (queue.size()!=1) {//最后会有一个分隔符
TreeNode tmp=queue.removeFirst();//每次删除队列中的一个值,并取出这个值看是否为分隔符
if(tmp==null) {
Iterator<TreeNode> it=null;
if(flag) {
it=queue.iterator();//队列正方向迭代
} else {
it=queue.descendingIterator();//队列反方向迭代
}
flag=!flag;
while (it.hasNext()) {
list.add(it.next().val);//将队列中的值按迭代方向加入到list这中
}
alist.add(new ArrayList<>(list));//每次都实例化
list.clear();//清空list
queue.addLast(null);//添加层分隔符
} else {
if(tmp.left!=null) {//如果二叉树有左子树加入到队列中
queue.add(tmp.left);

4000
}
if(tmp.right!=null) {//如果二叉树有右子树加入到队列中
queue.add(tmp.right);
}
}
}
return alist;
}
@Test
public void test() {
TreeNode t=new TreeNode(1);
t.left=new TreeNode(2);
t.right=new TreeNode(3);
t.left.left=new TreeNode(4);
t.left.right=new TreeNode(5);
t.right.left=new TreeNode(6);
t.right.right=new TreeNode(7);
Print(t);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: