在列表中水平返回二叉树

Returning a binary tree horizontally in a list

您如何 return 在列表中水平放置二叉搜索树?是否可以递归?

预期名单:8、3、10、1、6、14、4、7、13

[编辑] 由于索引,我设法在一个数组中完成它,因为我们知道节点 i 的左儿子将是 2i+1,右节点将是 2i+2。不过我不知道如何用列表来做。

您需要使用 breath-first 搜索。在伪代码中:

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

或者您可以进行深度优先搜索并记录每个节点的级别,然后在结果中使用 LINQ 查询

DisplayNodeVert(Node8).OrderBy(n=>n.Level).Select(n=>n.Content)