【发布时间】:2016-08-18 01:33:51
【问题描述】:
我正在尝试使用深度优先遍历和广度优先遍历来遍历二叉树,但我遇到了麻烦。我的节点和树实现似乎很好,我只是不确定如何正确遍历树的深度和广度。
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
class Tree:
def __init__(self):
self.root = None
def getRoot(self):
return self.root
def add(self, val):
if(self.root == None):
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if(val < node.v):
if(node.l != None):
self._add(val, node.l)
else:
node.l = Node(val)
else:
if(node.r != None):
self._add(val, node.r)
else:
node.r = Node(val)
def find(self, val):
if(self.root != None):
return self._find(val, self.root)
else:
return None
def _find(self, val, node):
if(val == node.v):
return node
elif(val < node.v and node.l != None):
self._find(val, node.l)
elif(val > node.v and node.r != None):
self._find(val, node.r)
def printTree(self):
if(self.root != None):
self._printTree(self.root)
def _printTree(self, node):
if(node != None):
self._printTree(node.l)
print(str(node.v) + ' ')
self._printTree(node.r)
# This doesn't work - graph is not subscriptable
def dfs(self, graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex] - visited)
return visited
# Haven't tried BFS. Would use a queue, but unsure of the details.
【问题讨论】:
-
这里有一个提示。对于 BFS,队列是最合适的,而对于 DFS,您可以使用堆栈。
-
@Neel OP 了解 DFS/BFS 实现——他们已经为方法编写了相同的代码。具体问题是,他们似乎正试图使他们的图可下标。
标签: python tree depth-first-search breadth-first-search