題目描述
請實作一個函數按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
思路:
1、實作之字形列印二叉樹,需要對每一層的結點進行分類,同時其列印的順序也是需要從左往右、或者從右往左都是需要根據其具體的層數進行判斷的;
2、對于在每次出棧或者入棧的時候,需要對棧進行判斷,對結點是否具有子節點進行判斷,否則得到的ArrayList會有[ ];
3、注意在棧中操作的是結點,在ArrayList中操作的是結點的值val;
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list =new ArrayList<ArrayList<Integer> >();
if(pRoot==null) return list;
Stack<TreeNode> s1=new Stack<TreeNode>();
Stack<TreeNode> s2=new Stack<TreeNode>();
s1.push(pRoot);
int count=1;
while(!s1.empty() || !s2.empty()){
if(count%2!=0){
ArrayList<Integer> arr=new ArrayList<Integer>();
while(!s1.empty()){
TreeNode node=s1.pop();
if(node != null) {
arr.add(node.val);
s2.push(node.left);
s2.push(node.right);
}
}
if (!arr.isEmpty()) {
list.add(arr);
count++;
}
}else{
ArrayList<Integer> arr=new ArrayList<Integer>();
while(!s2.empty()){
TreeNode node=s2.pop();
if(node != null) {
arr.add(node.val);
s1.push(node.right);
s1.push(node.left);
}
}
if (!arr.isEmpty()) {
list.add(arr);
count++;
}
}
}
return list;
}
}