在列表中水平返回二

在列表中水平返回二

如何在列表中水平返回二进制搜索树?是否可以递归?
c# - 在列表中水平返回二叉树-LMLPHP
预期名单:8、3、10、1、6、14、4、7、13
[编辑]由于索引,我成功地在数组中完成了这项工作,因为我们知道节点I的左子节点将是2i+1,右节点将是2i+2不过,我不知道怎么用单子来做。

最佳答案

你要先用呼吸搜索在伪代码中:

BreadthFirstSearch(Node root):

    create empty list L
    create empty queue Q

    Q.enqueue(root)

    while Q is not empty:
        current = Q.dequeue()

        L.append(current)
        if current.left is not null:
            Q.enqueue(current.left)
        if current.right is not null:
            Q.enqueue(current.right)

    return L

或者,递归地做
BreadthFirstSearch(Queue Q, List L):
    if Q is empty:
        return

    current = Q.dequeue()
    L.append(current)

    if current.left is not null:
        Q.enqueue(current.left)
    if current.right is not null:
        Q.enqueue(current.right)

    BreadthFirstSearch(Q, L)

对于第二种方法,您可以这样称呼它:
ConvertBSTToList(Node root):
    create empty queue Q
    create empty list L

    Q.enqueue(root)
    BreadthFirstSearch(Q,L)

    return L

关于c# - 在列表中水平返回二叉树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34949952/

10-11 21:26