您的位置:首页 > 编程语言 > PHP开发

PHP 通过数组判断数组顺序输出是否是二叉排序树的后序遍历结果

2012-09-30 15:57 513 查看
<?php
#通过数组判断该数组顺序输出是否是二叉树后序遍历结果

#@param a 待判断数组
#@param s 待判断开始部分
#@param e 待判断结束部分
function is_bst_post($a, $s, $e) {
if ($s == $e) {
return true;
}

#由于是后序遍历,所以根节点必然是最后一个元素
$root = $a[$e];
#找到第一个大于等于根节点的元素
#如果符合bst的数组,从s到i-1,都是左子树元素,i到e-1都是右子树的元素
#此处规定二叉树如果有相同的元素都放在右子树
$i = $s;
while ($i < $e && $a[$i] < $root) $i++;

#分别判断左右子树是否是bst
#如果左子树存在,判断左子树是否是bst
if ($i > $s) {
#此处不需要判断左子树是否都小于root,因为i左边的元素都已经是小于root了
$result_l = is_bst_post($a, $s, $i - 1);
} else if ($i == $s) { #左子树不存在
$result_l = true;
}

#如果右子树存在,判断右子树是否是bst
if ($i < $e) {
#查看右子树是否所有节点均大于等于root
for ($j = $i; $j < $e; $j++) {
if ($a[$j] < $root) {
return false;
}
}
$result_r = is_bst_post($a, $i, $e - 1);
} else if ($i == $e) { #右子树不存在
$result_r = true;
}

return ($result_l && $result_r);
}

$a = array(5, 7, 6, 9, 11, 10, 8);
$b = array(7, 4, 6, 5);
$t = is_bst_post($a, 0, count($a) - 1);
$t2 = is_bst_post($b, 0, count($b) - 1);
var_dump($t, $t2);
?>



bool(true) bool(false)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐