其實深度優先遍歷你可以把它看成是前序遍歷,比如對於如下二叉樹:
其深度遍歷的結果是:1,2,4,8,9,5,3,6,7
一、採用遞迴的方式進行遍歷。
二、利用棧,先將根入棧,再將根出棧,並將根的右子樹,左子樹存入棧,按照棧的先進後出規則來實現深度優先遍歷。
class node():
# 節點類
def __init__(self, data=-1):
self.data = data
self.left = none
self.right = none
class tree():
# 樹類
def __init__(self):
self.root = node()
def add(self, data):
# 為樹加入節點
node = node(data)
if self.root.data == -1: # 如果樹為空,就對根節點賦值
self.root = node
else:
myqueue =
treenode = self.root
while myqueue: # 對已有的節點進行層次遍歷
treenode = myqueue.pop(0)
if not treenode.left:
treenode.left = node
return
elif not treenode.right:
treenode.right = node
return
else:
def dfs(self,root): #遞迴實現深度優先遍歷
if root == none:
return
print(root.data)
self.dfs(root.left)
self.dfs(root.right)
def dfs_stack(self,root): #基於棧資料結構實現的深度遍歷
if root == none:
return
stack =
while stack:
now_node = stack.pop()
print(now_node.data)
if now_node.right != none:
if now_node.left != none:
if __name__ == '__main__':
# 主函式
datas = [1,2, 3, 4, 5, 6, 7, 8, 9]
tree = tree() # 新建乙個樹物件
for data in datas:
tree.add(data) # 逐個加入樹的節點
print('遞迴實現前序遍歷:')
廣度遍歷二叉樹和深度遍歷二叉樹演算法
二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...
深度優先遍歷二叉樹
3 深度優先遍歷二叉樹。include include include typedef struct treenode 樹節點結構體定義 treenode insertsbonmyleft treenode sb treenode insertsbonmyright treenode sb char...
二叉樹深度優先遍歷
在二叉樹的深度優先遍歷中分為前序遍歷 中序遍歷和後序遍歷,其中根據前序遍歷和中序遍歷或後序遍歷和中序遍歷可以推算出完整的二叉樹。三種遍歷方式為 前序遍歷 根節點 左子樹 右子樹 中序遍歷 左子樹 根節點 右子樹 後序遍歷 左子樹 右子樹 根節點 由上述三種遍歷方式可知中序遍歷最為重要,因為中序遍歷可...