<?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做标识入栈方向。