java - 如何进行水平顺序遍历?

标签 java tree-traversal

<分区>

我正在尝试对二叉树执行线性顺序遍历,但无法获得正确的输出。基本上我已经创建了一个队列,并首先将根入队,然后直到队列为空,我将第一个元素出列并将其子元素添加到队列的末尾。出列时它返回一个通用元素 ()。我在将此元素转换为树节点时遇到问题,以便我可以在下一步中将其子项排到队列的末尾。这是我到目前为止所做的:

public void levelOrderTraversal()
{
    NodeQueue<E> queue = new NodeQueue<E>();
    BTPosition<E> current = root;
    queue.enqueue(current.element());
    E temp = null;

    while(!queue.isEmpty())
    {
        temp = queue.dequeue();
        System.out.println(temp.toString());
        current.setElement(temp);

        if (hasLeft(current))
        {
            queue.enqueue(left(current).element());
        }
        if (hasRight(current))
        {
            queue.enqueue(right(current).element());
        }
    }
}

BTPosition 和 NodeQueue 的 API 可以在 http://net3.datastructures.net/doc4/index.html?net/datastructures/ 中找到

非常感谢任何建议..

最佳答案

您希望队列的类型为 BTPosition<E> . <E>只是对象类型,例如 IntegerString . BTPosition似乎是二叉树中的实际节点。

public void levelOrderTraversal()
{
    NodeQueue<BTPosition<E>> queue = new NodeQueue<BTPosition<E>>(); 
    BTPosition<E> current = root;
    queue.enqueue(current); 

    while(!queue.isEmpty())
    {
        current = queue.dequeue();
        System.out.println(temp.element().toString());

        if (current.getLeft() != null)
        {
            queue.enqueue(current.getLeft());
        }
        if (current.getRight() != null)
        {
            queue.enqueue(current.getRight());
        }
    }
}

关于java - 如何进行水平顺序遍历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9108265/

相关文章:

java - Java 中人类可编辑的类似 JSON 或类似 YAML 的程序配置

java - Chronicle 队列事件监听器

java - 如何将十六进制转换为以十进制打印时看起来相同的数字?

java - Hibernate 不会为 @ManyToOne 创建外键约束

java - 在 Java 中遍历通用 Trie

Java ClassLoader - 将动态加载的 jar 添加到系统类加载器

c - 在 C 中递归期间数组会发生什么?

algorithm - 我们可以使用 Morris 遍历进行后序吗?

algorithm - 并行遍历的树设计

c++ - 逐层遍历和打印二叉树