遍历树,使用从子节点获取的信息更新父节点

时间:2014-01-29 17:00:48

标签: java tree

我有一个由DefaultMutableTreeNodes组成的JTree。每个节点都有一个包含一些数据的UserObject。其中一个数据是我称之为“大小”的东西。我想在树中更新每个节点,并更新其子节点的“大小”。

 public void traverse(DefaultMutableTreeNode root)
    {
        Field f;

        int offset = 0;
        int size = 0;

        // Just changing enumeration kind here
        @SuppressWarnings("unchecked")
        Enumeration<DefaultMutableTreeNode> en = root.postorderEnumeration();
        while (en.hasMoreElements())
        {
            DefaultMutableTreeNode node = en.nextElement();
            f = (Field)node.getUserObject();
            if (node.isLeaf())
            {
                size += f.getSize();
            }
            else
            {
                f.setSize(size);
                size = 0;
            }
            System.out.println((node.isLeaf() ? "  - " : "+ ") + " -----> "+f);
        }
    }

我已经尝试过上面的代码,但它只适用于节点,直到第二级。

我错过了什么?

TIA。

1 个答案:

答案 0 :(得分:0)

也许试试:

Seudocode

    public void traverse(DefaultMutableTreeNode root)
{
    Field f;

    @SuppressWarnings("rawtypes")
    Enumeration en = root.postorderEnumeration();
    while (en.hasMoreElements())
    {
        DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) en.nextElement();
        if (currentNode.getParent() != null)
        {
            f = ((Field) ((DefaultMutableTreeNode) currentNode.getParent()).getUserObject());
            f.setSize(f.getSize() + ((Field) ((DefaultMutableTreeNode) currentNode).getUserObject()).getSize());
        }
    }
}

如果postOrderEnumerator以我认为的方式运作,这应该有用。