在列表中水平返回二叉树

时间:2016-01-22 15:14:55

标签: c# algorithm binary-search-tree

如何在列表中水平返回二叉搜索树?有可能递归吗?

enter image description here

预期清单:8,3,10,1,6,14,4,7,13

[编辑]由于我们知道节点i的左子将是2i + 1而右侧节点将是2i + 2,因此我设法在数组中执行它。我不知道怎么用列表来做这件事。

2 个答案:

答案 0 :(得分:4)

您希望使用先呼吸搜索。在伪代码中:

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

答案 1 :(得分:1)

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

[["Yes", 26], ["No", 21]]