题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- 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;
- }
- }
原文链接 http://blog.youkuaiyun.com/crazy__chen/article/details/45102547