给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
<?php
class Node{
public $left = null;
public $right = null;
public $val;
public function __construct($val) {
$this->val = $val;
}
}
class SList{
public $next = null;
public $val;
public function __construct($val) {
$this->val = $val;
}
}
function sortedListToBST($head, $end) {
if ($head == $end) {
return null;
}
$fast = $head;
$slow = $head;
while ($fast != $end && $fast->next != $end) {
$fast = $fast->next->next;
$slow = $slow->next;
}
$node = new Node($slow->val);
$node->left = sortedListToBST($head, $slow);
$node->right = sortedListToBST($slow->next, $end);
return $node;
}
$list1 = new SList(1);
$list2 = new SList(2);
$list3 = new SList(3);
$list4 = new SList(4);
$list5 = new SList(5);
$list1->next = $list2;
$list2->next = $list3;
$list3->next = $list4;
$list4->next = $list5;
$node = sortedListToBST($list1, null);
output($node);
function output($node) {
print $node->val."\t";
print "左".$node->left->val."右".$node->right->val."\n";
if ($node->left != null) {
output($node->left);
}
if ($node->right != null) {
output($node->right);
}
print "\n";
}