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

本文介绍了一种使用栈实现的之字形打印二叉树的方法,通过层次遍历结合奇偶判断,实现了从左至右及从右至左交替打印的二叉树节点值。代码中详细展示了如何利用队列和栈来达到预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
这题和多行打印二叉树基本一样,都是属于二叉树的层次遍历的变体,在之前那题的基础上加一个奇偶判断就可以了,我这里用栈实现倒序输出。
代码如下,注释在上一题就写明白了,这一题就不写了

using System.Collections.Generic;
/*
public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode (int x)
    {
        val = x;
    }
}*/
/*请实现一个函数按照之字形打印二叉树,
即第一行按照从左到右的顺序打印,
第二层按照从右至左的顺序打印,
第三行按照从左到右的顺序打印,其他行以此类推。*/
class Solution
{
    public List<List<int>> Print(TreeNode pRoot)
    {
        List<List<int>> treeList=new List<List<int>>();
        Queue<TreeNode> queue=new Queue<TreeNode>();
        if(pRoot==null) return treeList;
        queue.Enqueue(pRoot);
        int level=1;
        while(queue.Count!=0)
        {
            List<int> row=new List<int>();
            Stack<int> wor=new Stack<int>();
            int count=queue.Count;
            while(count>0)
            {
                TreeNode temp=queue.Peek();
                queue.Dequeue();
                if(temp.left!=null)
                {
                    queue.Enqueue(temp.left);
                }
                if(temp.right!=null)
                {
                    queue.Enqueue(temp.right);
                }
                
                if(level%2==0)
                {
                    wor.Push(temp.val);
                }
                else
                {
                    row.Add(temp.val);
                }
                count--;
            }
            if(level%2==0)
            {
                while(wor.Count!=0)
                {
                    int a=wor.Peek();
                    wor.Pop();
                    row.Add(a);
                }
            }
            treeList.Add(row);
            level++;
        }
        return treeList;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值