思路:层序的思路即queue实现bfs,然后就锯齿形的输出,不同点在于在每层节点收集时,是前插入结果列表,还是后插入结果列表。
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Integer[][]
*/
function zigzagLevelOrder($root) {
if ($root == null) return [];
$ret = [];
$queue = [$root];
$index = 0;
while ($queue) {
$n = count($queue);
++ $index;
$tmp = [];
for ($i = 1; $i <= $n; $i++) {
$node = array_shift($queue);
if ($index % 2) { //控制输出顺序
$tmp[] = $node->val;
} else {
array_unshift($tmp, $node->val);
}
if ($node->left)
array_push($queue, $node->left);
if ($node->right)
array_push($queue, $node->right);
}
$ret[] = $tmp;
}
return $ret;
}
}