请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解析:用两个栈,栈是先进后出,详细解析在代码中
代码:
import java.util.ArrayList;
/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }
} */ import java.util.*;
public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { //按照惯例首先写一个保存结果的链表 ArrayList<ArrayList<Integer>> res = new ArrayList<>(); //然后做最简单的判断 if(pRoot == null){ return res; } //下面才开始做题 //首先记录一下行数,奇数行从左到右,偶数行从右到左 int count = 1; //存放奇数层 Stack<TreeNode> oddStack = new Stack<>(); oddStack.push(pRoot); //存放偶数层 Stack<TreeNode> evenStack = new Stack<>(); while(!oddStack.isEmpty() || !evenStack.isEmpty()){ //奇数层 if(count % 2 == 1){ ArrayList<Integer> list = new ArrayList<>(); while(!oddStack.isEmpty()){ TreeNode temp = oddStack.pop(); if(temp != null){ list.add(temp.val); //偶数行打印从右到左;存储需要从左到右 evenStack.push(temp.left); evenStack.push(temp.right); } } if(list.size() != 0){ res.add(list); count++; } }else{ ArrayList<Integer> list = new ArrayList<>(); while(!evenStack.isEmpty()){ TreeNode temp = evenStack.pop(); if(temp != null){ list.add(temp.val); //奇数行打印从左到右,存储需要从右到左 oddStack.push(temp.right); oddStack.push(temp.left); } } if(list.size() != 0){ res.add(list); count++; } } } return res; } }
