1. 程式人生 > >59按之字形順序打印二叉樹

59按之字形順序打印二叉樹

left print nbsp else array flag oot ret add

題目描述

請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。

需要2個桟(後進先出)。
我們在打印某一行節點時,把下一層的子節點保存到相應的桟裏。如果當前打印的是奇數層,則先保存左子樹再保存右子樹節點到
第一個桟裏,如果當前打印的是偶數層,則先保存右子樹再保存左子樹節點。

 1 import java.util.ArrayList;
 2 import java.util.Stack;
 3 /*
 4 public class TreeNode {
 5     int val = 0;
 6     TreeNode left = null;
7 TreeNode right = null; 8 9 public TreeNode(int val) { 10 this.val = val; 11 12 } 13 14 } 15 */ 16 public class Solution { 17 public ArrayList<ArrayList<Integer> > Print(TreeNode root) { 18 ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
19 Stack<TreeNode> stack1 = new Stack<TreeNode>(); 20 Stack<TreeNode> stack2 = new Stack<TreeNode>(); 21 int flag = 1; 22 stack1.push(root); 23 while(!stack1.empty()||!stack2.empty()){ 24 if(flag==1){ 25 ArrayList<Integer> res_temp = new
ArrayList<Integer>(); 26 while(!stack1.empty()){ 27 TreeNode resNode = stack1.pop(); 28 if(resNode !=null){ 29 res_temp.add(resNode.val); 30 stack2.push(resNode.left); 31 stack2.push(resNode.right); 32 } 33 } 34 if(!res_temp.isEmpty()) 35 res.add(res_temp); 36 flag = 1-flag; 37 } 38 else{ 39 ArrayList<Integer> res_temp = new ArrayList<Integer>(); 40 while(!stack2.empty()){ 41 TreeNode resNode = stack2.pop(); 42 if(resNode!=null){ 43 res_temp.add(resNode.val); 44 stack1.push(resNode.right); 45 stack1.push(resNode.left); 46 } 47 } 48 if(!res_temp.isEmpty()) 49 res.add(res_temp); 50 flag = 1-flag; 51 } 52 } 53 return res; 54 } 55 56 }

59按之字形順序打印二叉樹