您的位置:首页 > 编程语言

按之字形顺序打印二叉树

2016-11-01 14:49 197 查看
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

/*
这个编程题的思路还是按照层次遍历的思路,只不过是奇偶行时要不要逆序的时候判断一下而已
*/
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

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

}

}
*/

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
//记录每一层的节点的值
ArrayList<Integer> in= new ArrayList<Integer>();
//将每一层的节点的值添加到二维list中
ArrayList<ArrayList<Integer> > out=new ArrayList<ArrayList<Integer> >();
//保存当前层的节点
Queue<TreeNode> q =new LinkedList<TreeNode>();
//记录下一层的节点
Queue<TreeNode> qin =new LinkedList<TreeNode>();
//利用栈进行逆序
Stack s=new Stack();
if(pRoot==null){
return out;
}
else{
q.add(pRoot);
int step=0;
while(true){
while(!q.isEmpty()){
TreeNode node=q.remove();
if(node.left!=null){
qin.add(node.left);
}
if(node.right!=null){
qin.add(node.right);
}
if(step%2==0){
in.add(node.val);
}
else{
s.push(node.val);
}
}
if(step%2!=0){
while(!s.isEmpty()){
in.add((Integer) s.pop());
}
}
out.add(in);
step++;
s=new Stack();
in=new ArrayList<Integer>();
if(qin.isEmpty()){
break;
}
q=qin;
qin =new LinkedList<TreeNode>();
}

}
return out;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 编程 遍历