给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)
思路:模拟层次遍历,记录下每一层的所有数据,然后反向输出
<?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();
$arrTmp = array();
array_push($arrVal, $head);
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);
}
}
array_unshift($arrTmp, $tmp);
}
print_r($arrTmp);
}
$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);