NC14题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
- 解法1:队列+flag标志位
- 解法2:双堆栈
解法1:队列+flag标志位
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
boolean flag = true;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
ArrayList<ArrayList<Integer>> res =new ArrayList();
if(pRoot == null){
return res;
}
while(!queue.isEmpty()){
int size = queue.size();
ArrayList<Integer> list = new ArrayList();
for(int i = 0; i < size; i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
if(!flag){
Collections.reverse(list);
}
flag = !flag;
res.add(list);
}
return res;
}
解法2:双堆栈
public class Solution {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res = new ArrayList();
if(pRoot == null){
return res;
}
Stack<TreeNode> lStack = new Stack();
Stack<TreeNode> rStack = new Stack();
lStack.push(pRoot);
while(!lStack.isEmpty() || !rStack.isEmpty()){
if(!lStack.isEmpty()){
ArrayList<Integer> list1 = new ArrayList();
int size1 = lStack.size();
for(int i = 0; i < size1; i++){
TreeNode node = lStack.pop();
list1.add(node.val);
if(node.left!=null){
rStack.push(node.left);
}
if(node.right!=null){
rStack.push(node.right);
}
}
res.add(list1);
}
if(!rStack.isEmpty()){
ArrayList<Integer> list2 = new ArrayList();
int size2 = rStack.size();
for(int i = 0; i < size2; i++){
TreeNode node = rStack.pop();
list2.add(node.val);
if(node.right!=null){
lStack.push(node.right);
}
if(node.left!=null){
lStack.push(node.left);
}
}
res.add(list2);
}
}
return res;
}
}