<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param pRoot TreeNode类
* @return int整型二维数组
*/
function PrintBinaryTree( $pRoot )
{
// write code here
if (!$pRoot) return [];
$result = [];
$arr[] = $pRoot;
$flag = true;
while(!empty($arr)) {
$len = count($arr);
$tmpArr = [];
$arr2 = [];
for ($i = 0;$i < $len; $i++) {
$cur = array_pop($arr);
$tmpArr[] = $cur->val;
if ($flag) {
$cur->left && $arr2[] = $cur->left;
$cur->right && $arr2[] = $cur->right;
} else {
$cur->right && $arr2[] = $cur->right;
$cur->left && $arr2[] = $cur->left;
}
}
$arr = $arr2;
$flag = !$flag;
$result[] = $tmpArr;
}
return $result;
}
思路:从第一层开始遍历,把当前层的节点都放到栈里,入栈方向分两个方向:从左到右、从右到左。用一个flag做标识入栈方向。