- 描述
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
- 思路
这道题与102号题目很相近,具体可以看我的这篇博客:LeetCode 102. Binary Tree Level Order Traversal
但是不同之处在于这次的遍历是z型的,也就是偶数层的数字要相反,可以在102题的解题基础上面,将最后的结果中奇数号索引的序列反转,即达到效果,下面给出代码 - 代码(c#)
public IList<IList<int>> ZigzagLevelOrder(TreeNode root)
{
IList<IList<int>> result = new List<IList<int>>();
int index = 0;
ZigzagLevelOrder(root, result, ref index);
for (int i = 1; i < result.Count; i=i+2)
{
result[i]= result[i].Reverse().ToList();//反转奇数号序列,达到z型的效果
}
return result;
}
public void ZigzagLevelOrder(TreeNode root, IList<IList<int>> result, ref int index)
{
if (root == null)
{
index--;
return;
}
if (result.Count <= index)
{
result.Add(new List<int>());
}
result[index].Add(root.val);
index++;
ZigzagLevelOrder(root.left, result, ref index);
index++;
ZigzagLevelOrder(root.right, result, ref index);
index--;
}
总结
在面对一些相似的算法题时,可以认真观察其中的不同,找出规律,在另外一道算法题的基础上面改进算法,以达到目的。相关链接
LeetCode原题地址:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/description/
相似题目解题思路:http://blog.csdn.net/qufayudao/article/details/79510412