如何在列表中水平返回二叉搜索树?有可能递归吗?
预期清单:8,3,10,1,6,14,4,7,13
[编辑]由于我们知道节点i的左子将是2i + 1而右侧节点将是2i + 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]]