【问题标题】:How to do a Level Order Traversal? [duplicate]如何进行水平顺序遍历? [复制]
【发布时间】:2012-02-02 15:02:56
【问题描述】:

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

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/找到

任何建议都非常感谢..

【问题讨论】:

    标签: java tree-traversal


    【解决方案1】:

    您希望队列的类型为BTPosition&lt;E&gt;&lt;E&gt; 只是对象类型,例如IntegerStringBTPosition 似乎是二叉树中的实际节点。

    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());
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2012-12-26
      • 2014-06-27
      • 2016-10-16
      • 2020-07-16
      相关资源
      最近更新 更多