这题和多行打印二叉树基本一样,都是属于二叉树的层次遍历的变体,在之前那题的基础上加一个奇偶判断就可以了,我这里用栈实现倒序输出。
代码如下,注释在上一题就写明白了,这一题就不写了
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;
}
}