题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
package AC;
import java.util.*;
public class NC14按之字形顺序打印二叉树 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
}
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { int status=1;//奇数从左到右,偶数从右到左,每遍历一层,则加一 ArrayList<ArrayList<Integer> > res=new ArrayList<>();//存放结果 //Queue<TreeNode> q=new LinkedList<>(); Stack<TreeNode> s=new Stack<>();//存奇数层节点 Stack<TreeNode> ss=new Stack<>();//存偶数层节点 if(pRoot==null){//这一段没想到 return res; } s.add(pRoot); while (!s.isEmpty() || !ss.isEmpty()){ ArrayList<Integer> temp=new ArrayList<>();//存放当前层的结果 if(status%2==1){ int n=s.size(); for(int i=0;i<n;i++){ TreeNode node=s.pop(); if(node.left!=null)ss.add(node.left); if(node.right!=null)ss.add(node.right); temp.add(node.val); } } else{ int nn=ss.size(); for(int i=0;i<nn;i++){ TreeNode node=ss.pop(); if(node.right!=null)s.add(node.right); if(node.left!=null)s.add(node.left); temp.add(node.val); } } status++; res.add(temp); } return res; }
}