[英]Java TreeNode while statement
我正在为Java TreeNode编写代码。 我想做一会儿语句,从树的根循环到所有后续节点并更新编号。 我可以使用if语句来执行此操作,但这只会循环遍历第一个节点并在此处结束。
if
(node.getChildCount() > 0)
{
updatenumbers(node);
}
我尝试了while语句,但这会导致程序突然停止,并且不会更新树,不会引发任何错误或异常。 我不确定是什么问题。
while
(node.getChildCount() > 0)
{
updatenumbers( 0, node);
}
这是updatenumbers的代码
private void updatenumbers(int _index, MutableTreeNode _node) {
int count = _node.getChildCount;
for (int i = _index; i < count ; i++){
node.setindex(i);
}
我建议以下机制。
1)用函数替换while循环
2)将节点初始化为根元素。 调用带有Initialized节点的函数。
3)在函数内部,使用getChildCount()作为基本条件。
4)通过左右孩子递归
假设它是一棵二叉树
假设您有根节点:
MutableTreeNode rootNode = //whatever
然后,您可以将ArrayList
用作对象之类的队列,以在树上进行while
循环。
ArrayList<MutableTreeNode> queue = new ArrayList<MutableTreeNode>();
queue.add(rootNode)
while(queue.size() > 0){
MutableTreeNode tempNode = queue.get(0);//access first element only
updatenumbers(tempNode); //update children of just this single node
queue.remove(0);//remove from queue
//now add the children of tempNode
queue.add(tempNode.left);
queue.add(tempNode.right);
}
在此示例中,我假设它是一个二进制搜索树。 您可能需要根据树的实际情况来调整子部分的添加。
现在,对于此方法, updatenumbers
。 如果起始索引始终为0
则无需传递起始索引。 这里的问题是您要设置当前节点的索引,而没有子节点。 您想要从node
获取孩子(例如,通过自定义方法getChild(i)
)。
private void updatenumbers(MutableTreeNode node) {
int count = node.getChildCount;
for (int i = 0; i < count ; i++){
node.getChild(i).setindex(i);//you need a getChild method or something similar
}
更新 :由于刚刚发现您正在使用JTree ,因此这两个JTree
来源可能会有所帮助:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.