编程语言
首页 > 编程语言> > java – 如何进行级别顺序遍历?

java – 如何进行级别顺序遍历?

作者:互联网

参见英文答案 > Binary tree level order traversal                                    5个
我正在尝试在二叉树上进行线性顺序遍历,但无法获得正确的输出.基本上我已经创建了一个队列并从排队根开始,然后直到队列为空我将第一个元素出列并将其子元素添加到队列的末尾.出列时,它返回一个泛型元素().我在将此元素转换为树节点时遇到问题,以便我可以在下一步中将其子节点排队到队列的末尾.这是我到目前为止所做的:

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>. &LT E – 代替;只是对象类型,例如Integer或String. 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,tree-traversal
来源: https://codeday.me/bug/20190626/1292169.html