PHP树实现:访问父节点

时间:2010-02-28 19:57:54

标签: php tree implementation nodes

我有一个用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属性,该属性包含对父节点的引用。 谢谢!

3 个答案:

答案 0 :(得分:1)

您必须将父项的引用传递给节点。

答案 1 :(得分:1)

您需要为每个节点存储父节点(除了没有父节点的根节点外)。

所以只需将属性添加到包含父节点的 JaxpTreeNode ,或者如果它是根节点,则添加 null

答案 2 :(得分:0)

这是我用来构建二叉树数据结构及其相应操作的完整代码: