按之字形顺序打印二叉树java实现

来源:互联网 发布:淘宝优木家具怎么样 编辑:程序博客网 时间:2024/06/04 00:41

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路:定义两个栈,分别遍历整个二叉树并将结点入栈,两个栈互相配合,按照从左往右或者从右往左的顺序入栈。一层一层的入栈和出栈。则可以达到题目要求。

import java.util.ArrayList;import java.util.*;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        ArrayList<ArrayList<Integer>> aList=new ArrayList<ArrayList<Integer>>();           if(pRoot==null)               return aList;        Stack<TreeNode> s1=new Stack<TreeNode>();           s1.add(pRoot);           Stack<TreeNode> s2=new Stack<TreeNode>();        while(!s1.isEmpty()||!s2.isEmpty()){               if(!s1.isEmpty()){                   ArrayList<Integer> aList2=new ArrayList<Integer>();               while(!s1.isEmpty()){                   TreeNode p=s1.pop();                   aList2.add(p.val);                   if(p.left!=null)                       s2.add(p.left);                   if(p.right!=null)                       s2.add(p.right);               }               aList.add(aList2);               }               else {                   ArrayList<Integer> aList2=new ArrayList<Integer>();                   while(!s2.isEmpty()){                   TreeNode p=s2.pop();                   if(p.right!=null)                       s1.add(p.right);                   if(p.left!=null)                       s1.add(p.left);                   aList2.add(p.val);               }               aList.add(aList2);               }           }           return aList;    }}
原创粉丝点击