获取gwt树中的所有子计数

时间:2014-09-29 15:47:07

标签: gwt

我正在使用gwt 2.4 我有一个树小部件。我知道getchildcount()方法给孩子计数。 如果有一个树的级别为1,并且假设我在此根下有一个级别2,那么级别1上的getchildcount()将返回1.

在另一种情况下,如果我有一个级别为1的树作为根级别,而一个级别2作为其子级。如果这个2级内部的3级为其子级,则此级别3的级别为4级。 如果我在级别1上执行getchildcount(),那么它仍然将计数返回为1。 有什么方法可以让我得到所有孩子的数量吗?也就是说,在这种情况下,1级的子计数应该在考虑到2级孩子的情况下返回3?

希望我足够清楚

1 个答案:

答案 0 :(得分:2)

您可以使用stack来计算所有节点。这是一个深度tree traversal

        import java.util.Stack;

        import com.google.gwt.core.client.EntryPoint;
        import com.google.gwt.core.client.GWT;
        import com.google.gwt.user.client.Window;
        import com.google.gwt.user.client.ui.RootPanel;
        import com.google.gwt.user.client.ui.Tree;
        import com.google.gwt.user.client.ui.TreeItem;

        public void onModuleLoad() 
        {
          Tree tree = new Tree();
          TreeItem addTextItemRoot = tree.addTextItem("root");

          TreeItem addTextItemLeft = addTextItemRoot.addTextItem("left");
          addTextItemRoot.addItem(addTextItemLeft);

          TreeItem addTextItemRight = addTextItemRoot.addTextItem("right");
          addTextItemRoot.addItem(addTextItemRight);

          TreeItem addTextItemLeft1 = addTextItemRoot.addTextItem("left-1");
          addTextItemRight.addItem(addTextItemLeft1);

          TreeItem addTextItemRight1 = addTextItemRoot.addTextItem("right-1");
          addTextItemRight.addItem(addTextItemRight1);

          Window.alert("count " + dfs(addTextItemRoot));

          RootPanel.get().add(tree);
    }

    int dfs(TreeItem addTextItemRoot)
    {
        int count = 0;

        Stack<TreeItem> stack = new Stack<TreeItem>();
        stack.push(addTextItemRoot);

        while(!stack.isEmpty())
        {
            TreeItem pop = stack.pop();

            int childCount = pop.getChildCount();

            for(int i=0;i<childCount;i++)
            {
                TreeItem child = pop.getChild(i);
                stack.push(child);
                count++;
            }
        }

        return count;
    }
}