如何在列表中水平返回二进制搜索树?是否可以递归?
预期名单: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/