我正在使用gwt 2.4 我有一个树小部件。我知道getchildcount()方法给孩子计数。 如果有一个树的级别为1,并且假设我在此根下有一个级别2,那么级别1上的getchildcount()将返回1.
在另一种情况下,如果我有一个级别为1的树作为根级别,而一个级别2作为其子级。如果这个2级内部的3级为其子级,则此级别3的级别为4级。 如果我在级别1上执行getchildcount(),那么它仍然将计数返回为1。 有什么方法可以让我得到所有孩子的数量吗?也就是说,在这种情况下,1级的子计数应该在考虑到2级孩子的情况下返回3?
希望我足够清楚
答案 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;
}
}