给定一颗二叉树,逐层打印,并且每层打印的方向是不一样的,比如:
逐层打印的结果是:
1
3 2
4 5 6
8 7
代码:
import java.util.ArrayList; import java.util.Stack; public class Main { public static class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) { this.val = val; } } public static ArrayList<ArrayList<Integer>> printZigZag(TreeNode head) { if(head == null) { return null; } Stack<TreeNode> s1 = new Stack<>(); Stack<TreeNode> s2 = new Stack<>(); ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); s1.push(head); while(!s1.isEmpty() || !s2.isEmpty()) { if(!s1.isEmpty()) { ArrayList<Integer> arr1 = new ArrayList<>(); while(!s1.isEmpty()) { TreeNode t1 = s1.pop(); arr1.add(t1.val); //注意,一定要保证你插入到栈中的值不为空 if(t1.left!=null) { s2.push(t1.left); } if(t1.right!=null) { s2.push(t1.right); } } res.add(arr1); } else if(!s2.isEmpty()){ ArrayList<Integer> arr2 = new ArrayList<>(); while(!s2.isEmpty()) { TreeNode t2 = s2.pop(); arr2.add(t2.val); if(t2.right!=null) { s1.push(t2.right); } if(t2.left!=null) { s1.push(t2.left); } } res.add(arr2); } } return res; } public static void main(String[] args) { TreeNode head = new TreeNode(1); head.left = new TreeNode(2); head.right = new TreeNode(3); head.left.left = new TreeNode(4); head.right.left = new TreeNode(5); head.right.right = new TreeNode(6); head.right.left.left = new TreeNode(7); head.right.left.right = new TreeNode(8); ArrayList<ArrayList<Integer>> res = printZigZag(head); for(int i=0; i<res.size(); i++) { ArrayList<Integer> res1 = res.get(i); for(int j=0; j<res1.size(); j++) { System.out.print(res1.get(j)+" "); } System.out.println(); } } }