繁体   English   中英

Java TreeNode while语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM