【发布时间】:2019-01-29 03:25:38
【问题描述】:
伙计们,我在 PHP 中遇到了这个问题,我正在尝试在 PHP 中反转二叉树,但我不知道如何解决这个问题。
任务是倒置二叉树,所以叶子的顺序是倒置的。
例子:
1
/ \
2 3
/ \ / \
4 5 6 7
转换为:
1
/ \
3 2
/ \ / \
7 6 5 4
注意:请记住,树也可能不平衡。
/**
* leaf data structure
*/
class BinaryNode {
/** @var mixed null */
public $value = null;
/** @var BinaryNode null */
public $left = null;
/** @var BinaryNode null */
public $right = null;
/**
* @param mixed $value
*/
public function __construct( $value ) {
$this->value = $value;
}
}
class BinaryTree
{
/**
* @param BinaryNode $root
* @return BinaryNode
*/
public static function invert($root): BinaryNode
{
//$BinaryNode = new BinaryNode();
if(!isset($root)) return $root;
$tempLeftNode = $root->left;
$root->left = $root->right;
$root->right = $tempLeftNode;
self::invert($root->left);
self::invert($root->right);
return $root;
}
}
$root = new BinaryNode(1);
$root->left = new BinaryNode(2);
$root->right = new BinaryNode(3);
$root->left->left = new BinaryNode(4);
$root->left->right = new BinaryNode(5);
$root->right->left = new BinaryNode(6);
$root->right->right = new BinaryNode(7);
print_r(BinaryTree::invert($root));
【问题讨论】:
-
你的 BinaryTree 类有一个 invert 方法。它不能正常工作吗?它有什么作用?
-
欢迎来到 SO 和好问题。请注意,您的
invert函数在叶子上返回null,但您的返回类型不允许这样做,因此请考虑修复它以进行编译 - 如果您删除返回类型说明符,您的代码会产生您想要的输出。 -
欢迎来到 SO 并请测试答案。与您的问题互动。 :)
-
谢谢你们,我删除了 invert 调用,它现在可以正常工作了