剑指offer第五十九题。
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
思路是搞两个栈,一个栈专门保存奇数层数据,一个栈专门保存偶数层数据。注意保存的顺序,保存偶数层的时候是从左到右,保存奇数层的时候从右到左。这样依次出栈的时候顺序是第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,依次类推。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| public class Solution { public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > res = new ArrayList<>(); if(pRoot == null){ return res; } int layer = 1; Stack<TreeNode> stack1 = new Stack<>(); stack1.push(pRoot); Stack<TreeNode> stack2 = new Stack<>(); while(!stack1.isEmpty() || !stack2.isEmpty()){ if(layer%2 != 0){ ArrayList<Integer> list = new ArrayList<>(); while(!stack1.isEmpty()){ TreeNode tmp = stack1.pop(); if(tmp != null){ list.add(tmp.val); stack2.push(tmp.left); stack2.push(tmp.right); } } if(list.size() != 0){ res.add(list); layer++; } }else{ ArrayList<Integer> list = new ArrayList<>(); while(!stack2.isEmpty()){ TreeNode tmp = stack2.pop(); if(tmp != null){ list.add(tmp.val); stack1.push(tmp.right); stack1.push(tmp.left); } } if(list.size() != 0){ res.add(list); layer++; } } } return res; }
}
|