按之字形打印二叉树 --剑指offer
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:两个栈 一个存储奇数层 一个存储偶数层结点 分别遍历
import java.util.Stack; import java.util.ArrayList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> result=new ArrayList<>(); if (pRoot == null) return result; Stack<TreeNode> stack1=new Stack<>(); Stack<TreeNode> stack2=new Stack<>(); int i=1; stack1.push(pRoot); while (!stack1.isEmpty() || !stack2.isEmpty()){ ArrayList<Integer> list=new ArrayList<>(); if(i % 2 !=0){//奇数层 while (!stack1.isEmpty()){ TreeNode node=stack1.pop(); if(node != null){ list.add(node.val); if(node.left != null) { stack2.add(node.left); } if(node.right != null) { stack2.add(node.right); } } } }else { while (!stack2.isEmpty()){ TreeNode node=stack2.pop(); if(node != null){ list.add(node.val); if(node.right != null) { stack1.add(node.right); } if(node.left != null) { stack1.add(node.left); } } } } if(list != null){ result.add(new ArrayList<>(list)); } i ++; } return result; } }