请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
1、用两个栈实现
package test04;
import java.util.ArrayList;
import java.util.Stack;
/*
* 注意从第一层开始,每一层的节点都是先进入相应的栈,在出栈,最后按照出栈的顺序,add到每一层的tempList里面
* 再把每一层的tempList add到result中,最终返回
* 例如,从一颗二叉树的根节点开始,因为根节点为第一层,为奇数层。所以先把第一层的根节点push到奇数栈odd里面
* 进入while(当size不等于0时,说明整个二叉树还没有遍历完)循环,判断if条件,此时每次从奇数栈odd中pop,都将该节点
* 的左右子节点按照先左后右的顺序push到偶数栈even中,每循环一次,都要把刚才从奇数栈odd中pop的元素add到这一
* 个的临时tempList中,当stackSize==1时,说明这一层已经遍历完了,此时把每一层的tempList add到reslut中,当while
* 条件成立,说明整个二叉树已经遍历完,最终返回result。
*
*/
public class test05 {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
if (pRoot == null) {
return result;
}
int stackSize;
boolean isOdd = true;//控制当前遍历的是奇数层还是偶数层
Stack<TreeNode> odd = new Stack<>();//保存奇数层节点的栈
odd.push(pRoot);
Stack<TreeNode> even = new Stack<>();//保存偶数层节点的栈
ArrayList<Integer> tempList = new ArrayList<>();