题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
用两个stack依次保存相邻的两层。
代码如下:
*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> >matrix=new ArrayList();
if(pRoot==null)
return matrix;
Stack<TreeNode> stack1=new Stack();
Stack<TreeNode> stack2=new Stack();
stack1.push(pRoot);
ArrayList<Integer> array=new ArrayList();
while(!stack1.empty()||!stack2.empty())
{
while(!stack1.empty())//在打印stack1中存放的层时,将下一层存放入stack2
{
TreeNode node=stack1.pop();
if(node.left!=null)
stack2.push(node.left);
if(node.right!=null)
stack2.push(node.right);
array.add(node.val);
if(stack1.empty())//当前array保存完该层结点时,存入matrix,并将array赋给新的ArrayList;
{
matrix.add(array);
array=new ArrayList<Integer>();
}
}
while(!stack2.empty())//在打印stack2中存放的层时,将下一层存放入stack1
{
TreeNode node=stack2.pop();
if(node.right!=null)
stack1.push(node.right);
if(node.left!=null)
stack1.push(node.left);
array.add(node.val);
if(stack2.empty())
{
matrix.add(array);
array=new ArrayList<Integer>();
}
}
}
return matrix;
}
}