【发布时间】:2023-04-05 22:39:01
【问题描述】:
我正在尝试在 PHP (another description of the structure) 中实现 nested dataset structure 的面向对象版本。我已经创建了一个节点实现:
class Node
{
private $parent;
private $nodes = [];
private $level = 1;
private $left = 1;
private $right = 2;
/**
* @return self|null
*/
public function getParent()
{
return $this->parent;
}
private function setParent(self $parent = null)
{
$this->parent = $parent;
}
public function getLevel(): int
{
return $this->level;
}
private function setLevel(int $level)
{
$this->level = $level;
}
public function getLeft(): int
{
return $this->left;
}
private function setLeft(int $left)
{
$this->left = $left;
}
public function getRight(): int
{
return $this->right;
}
private function setRight(int $right)
{
$this->right = $right;
}
/**
* @return static[]
*/
public function getNodes(): array
{
return $this->nodes;
}
public function addNode(Node $new)
{
$new->setLevel($this->getLevel() + 1);
$this->nodes[] = $new;
// @todo
}
}
但是我需要帮助实现addNode 方法,它应该向当前节点添加一个新节点并更新整个树,尤其是新添加的节点、父节点、子节点等.
为了让一切变得更简单,我创建了简单的测试用例,它将检查一切是否已正确实施:
$country = new Node();
$state = new Node();
$city = new Node();
$country->addNode($state);
$state->addNode($city);
assert($country->getLeft() === 1);
assert($country->getRight() === 6);
assert($country->getLevel() === 1);
assert($state->getLeft() === 2);
assert($state->getRight() === 5);
assert($state->getLevel() === 2);
assert($city->getLeft() === 3);
assert($city->getRight() === 4);
assert($city->getLevel() === 3);
【问题讨论】:
标签: php oop php-7 recurrence