树——按“之”字形打印二叉树(层序遍历变型)

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
用两个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;
            }
        
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值