LeetCode 二叉树的Z字遍历栈实现 Java
题目描述
代码
import java. util. * ;
public class Solution {
public ArrayList< ArrayList< Integer> > Print ( TreeNode pRoot) {
ArrayList< ArrayList< Integer>> res = new ArrayList < > ( ) ;
if ( pRoot == null ) return res;
Stack< TreeNode> stack1 = new Stack < > ( ) ;
Stack< TreeNode> stack2 = new Stack < > ( ) ;
stack1. push ( pRoot) ;
ArrayList< Integer> list = new ArrayList < > ( ) ;
boolean flag = true ;
while ( ! stack1. isEmpty ( ) || ! stack2. isEmpty ( ) ) {
if ( flag) {
while ( ! stack1. isEmpty ( ) ) {
TreeNode node = stack1. pop ( ) ;
list. add ( node. val) ;
if ( node. left != null ) {
stack2. push ( node. left) ;
}
if ( node. right != null ) {
stack2. push ( node. right) ;
}
}
} else {
while ( ! stack2. isEmpty ( ) ) {
TreeNode node = stack2. pop ( ) ;
list. add ( node. val) ;
if ( node. right != null ) {
stack1. push ( node. right) ;
}
if ( node. left != null ) {
stack1. push ( node. left) ;
}
}
}
flag = ! flag;
res. add ( list) ;
list = new ArrayList < > ( ) ;
}
return res;
}
}