Z字型打印二叉树

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

1、用两个栈实现

package test04;
import java.util.ArrayList;
import java.util.Stack;
/*
 * 注意从第一层开始,每一层的节点都是先进入相应的栈,在出栈,最后按照出栈的顺序,add到每一层的tempList里面
 * 再把每一层的tempList add到result中,最终返回
 * 例如,从一颗二叉树的根节点开始,因为根节点为第一层,为奇数层。所以先把第一层的根节点push到奇数栈odd里面
 * 进入while(当size不等于0时,说明整个二叉树还没有遍历完)循环,判断if条件,此时每次从奇数栈odd中pop,都将该节点
 * 的左右子节点按照先左后右的顺序push到偶数栈even中,每循环一次,都要把刚才从奇数栈odd中pop的元素add到这一
 * 个的临时tempList中,当stackSize==1时,说明这一层已经遍历完了,此时把每一层的tempList add到reslut中,当while
 * 条件成立,说明整个二叉树已经遍历完,最终返回result。
 * 
 */
public class test05 {
   
   
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<>();
        if (pRoot == null) {
            return result;
        }
        int stackSize;
        boolean isOdd = true;//控制当前遍历的是奇数层还是偶数层

        Stack<TreeNode> odd = new Stack<>();//保存奇数层节点的栈
        odd.push(pRoot);

        Stack<TreeNode> even = new Stack<>();//保存偶数层节点的栈

        ArrayList<Integer> tempList = new ArrayList<>();

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值