剑指offer--按之字形顺序打印二叉树

来源:互联网 发布:淘宝窗帘上门安装服务 编辑:程序博客网 时间:2024/05/16 14:06

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
import java.util.ArrayList;import java.util.Stack;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();if(pRoot==null) return result;Stack<TreeNode> stack1 = new Stack<TreeNode>();Stack<TreeNode> stack2 = new Stack<TreeNode>();boolean flag = true;stack1.add(pRoot);ArrayList<Integer> start = new ArrayList<Integer>();start.add(pRoot.val);result.add(start);do{ArrayList<Integer> temp = new ArrayList<Integer>();if(flag){while(stack1.size()!=0){TreeNode t = stack1.pop();if(t.right!=null){stack2.add(t.right);temp.add(t.right.val);}if(t.left!=null){stack2.add(t.left);temp.add(t.left.val);}}}else{while(stack2.size()!=0){TreeNode t = stack2.pop();if(t.left!=null){stack1.add(t.left);temp.add(t.left.val);}if(t.right!=null){stack1.add(t.right);temp.add(t.right.val);}}}if(temp.size()!=0)result.add(temp);flag = !flag;}while(stack1.size()!=0||stack2.size()!=0);return result;}}

0 0