第一題 按之字形順序打印二叉樹
實(shí)現(xiàn)方法是采用兩個(gè)棧,首先將根節(jié)點(diǎn)放入棧s1,然后偶數(shù)層從右往左插入,奇數(shù)層從左往右,所以要定義一個(gè)層數(shù)layer。因?yàn)闂5暮笕胂瘸龅奶攸c(diǎn),奇數(shù)層先保存右樹,后保存左樹,偶數(shù)層相反
public static ArrayList<ArrayList<Integer>> zhiZiPrint(TreeNode pnode) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
//存放奇數(shù)層
Stack<TreeNode> s1 = new Stack<TreeNode>();
//存放偶數(shù)層
Stack<TreeNode> s2 = new Stack<TreeNode>();
//初始化層數(shù)
int layer =1;
//初始化層1
s1.push(pnode);
while(!s1.isEmpty() || !s2.empty()) {
if(layer%2==1) {
//奇數(shù)層
ArrayList<Integer> temp =new ArrayList<Integer>();
while(!s1.empty()){
TreeNode node = s1.pop();
if(node!=null) {
temp.add(node.val);
System.out.print(node.val + " ");
s2.push(node.right);
s2.push(node.left);
}
}
if(!temp.isEmpty()){
layer++;
list.add(temp);
}
} else {
ArrayList<Integer> temp =new ArrayList<Integer>();
while(!s1.empty()){
TreeNode node = s1.pop();
if(node!=null) {
temp.add(node.val);
System.out.print(node.val + " ");
s2.push(node.right);
s2.push(node.left);
}
}
if(!temp.isEmpty()){
layer++;
list.add(temp);
}
}
}
return list;
}