我有一个用PHP实现的自己的Tree对象。假设我们有一棵树:
Root |_ Folder 1 |_ Folder 2 |_ Subfolder 1
我可以像这样访问Subfolder 1
:
$sf1 = $Tree->NavigateTo("Folder 2/Subfolder 1")
$sf1
将保留Subfolder 1
节点。我想实现一个GetParentNode()
方法,以便
$parent = $sf1->GetParentNode() // Equivalent to Folder 2
这是树的定义:
class JaxpTree
{
/**
* @var JaxpTree|JaxpTreeNode Array of Tree nodes.
* @access public
*/
public $Nodes;
/**
* @var JaxpList Array of Tree items.
* @access public
*/
public $ItemList;
}
它通过嵌套Tree对象来工作,因此可以访问Subfolder 1,如:
$Tree->Nodes["Folder 2"]->Nodes["Subfolder 1"]
将是一个TreeNode对象:
/**
* Represents a Tree node.
*
* @package Jaxp.Trees
* @subpackage TreeNode
* @since 1.0
*/
class JaxpTreeNode
{
/**
* @var int Node id.
* @access public
*/
public $Id;
/**
* @var JaxpTreeNodeAttributes Contains the node's attributes.
* @access public
*/
public $Attributes;
}
如何在此处实现父节点访问?
解决方案是添加一个Parent属性,该属性包含对父节点的引用。 谢谢!
答案 0 :(得分:1)
您必须将父项的引用传递给节点。
答案 1 :(得分:1)
您需要为每个节点存储父节点(除了没有父节点的根节点外)。
所以只需将父属性添加到包含父节点的 JaxpTreeNode ,或者如果它是根节点,则添加 null 。
答案 2 :(得分:0)
这是我用来构建二叉树数据结构及其相应操作的完整代码: