给定一个二叉树,返回该二叉树的之字形层序遍历,(从左向右,下一层从右向左,一直这样交替)
思路:和层次遍历差不多,不过把每一行拿出来,然后根据深度,决定这一行的输出顺序
<?php
class Node{
public $left = null;
public $right = null;
public $val;
public function __construct($val) {
$this->val = $val;
}
}
function levelOrderBottom($head) {
if ($head == null) {
return;
}
$arrVal = array();
array_push($arrVal, $head);
$flag = 1;
while (!empty($arrVal)) {
$num = count($arrVal);
$tmp = [];
for ($i = 0; $i < $num; $i ++) {
$node = array_shift($arrVal);
$tmp[] = $node->val;
if ($node->left != null) {
array_push($arrVal, $node->left);
}
if ($node->right != null) {
array_push($arrVal, $node->right);
}
}
if ($flag % 2 == 1) {
//正向输出
for ($i = 0; $i < $num; $i ++) {
print $tmp[$i];
}
} else {
//反向输出
for ($i = $num - 1; $i >= 0; $i --) {
print $tmp[$i];
}
}
$flag ++;
}
}
$node1 = new Node(3);
$node2 = new Node(9);
$node3 = new Node(10);
$node4 = new Node(15);
$node5 = new Node(7);
$node1->left = $node2;
$node1->right = $node3;
$node3->left = $node4;
$node3->right = $node5;
levelOrderBottom($node1);