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

来源:互联网 发布:语音广告制作软件 编辑:程序博客网 时间:2024/05/21 10:29

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
[java] view plain copy
  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.     ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {  
  18.         ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();  
  19.         if(pRoot==nullreturn result;  
  20.         Stack<TreeNode> stack1 = new Stack<TreeNode>();  
  21.         Stack<TreeNode> stack2 = new Stack<TreeNode>();  
  22.         boolean flag = true;  
  23.         stack1.add(pRoot);  
  24.         ArrayList<Integer> start = new ArrayList<Integer>();  
  25.         start.add(pRoot.val);  
  26.         result.add(start);  
  27.         do{           
  28.             ArrayList<Integer> temp = new ArrayList<Integer>();  
  29.             if(flag){  
  30.                 while(stack1.size()!=0){                      
  31.                     TreeNode t = stack1.pop();                    
  32.                     if(t.right!=null){  
  33.                         stack2.add(t.right);  
  34.                         temp.add(t.right.val);  
  35.                     }  
  36.                     if(t.left!=null){  
  37.                         stack2.add(t.left);  
  38.                         temp.add(t.left.val);  
  39.                     }  
  40.                 }                 
  41.             }else{  
  42.                 while(stack2.size()!=0){  
  43.                     TreeNode t = stack2.pop();  
  44.                     if(t.left!=null){  
  45.                         stack1.add(t.left);  
  46.                         temp.add(t.left.val);  
  47.                     }  
  48.                     if(t.right!=null){  
  49.                         stack1.add(t.right);  
  50.                         temp.add(t.right.val);  
  51.                     }  
  52.                 }                 
  53.             }             
  54.             if(temp.size()!=0)  
  55.                 result.add(temp);  
  56.             flag = !flag;  
  57.         }while(stack1.size()!=0||stack2.size()!=0);       
  58.         return result;  
  59.     }  
  60.   
  61. }  


原文链接  http://blog.csdn.net/crazy__chen/article/details/45102547