學習筆記 Python實現樹的遍歷 (DFS)

2021-10-02 12:45:09 字數 2213 閱讀 5916

學習了通過python實現樹的遍歷(dfs)

自己還原了一下**

#樹 dfs

class treenode(object):

def __init__(self,x) :

self.val = x

self.left = none

self.right = none

if __name__ == '__main__':

#構建樹

t1 = treenode(1)

t2 = treenode(2)

t3 = treenode(3)

t4 = treenode(4)

t5 = treenode(5)

t6 = treenode(6)

t7 = treenode(7)

t8 = treenode(8)

t1.left = t2

t1.right = t3

t2.left = t4

t2.right = t5

t3.left = t6

t3.right = t7

t6.right = t8

#遞迴# 先序 (根 -> 左兒子 -> 右兒子)

def preorderrecusive(root):

if root == none:

return

print(root.val)

preorderrecusive(root.left)

preorderrecusive(root.right)

# 中序 (左兒子 -> 根 -> 右兒子)

def midorderrecusive(root):

if root == none:

return

print(root.val)

preorderrecusive(root.left)

preorderrecusive(root.right)

# 後序 (左兒子 -> 右兒子 -> 根)

def midorderrecusive(root):

if root == none:

return

preorderrecusive(root.left)

preorderrecusive(root.right)

print(root.val)

#非遞迴

#先序 def preorder(root):

if root == none:

return

stack = #用棧儲存資料

tmpnode = root #需要遍歷的根

while tmpnode or stack :

while tmpnode: #將所有左節點入棧,直到左節點為空

print(tmpnode.val)

tmpnode = tmpnode.left

node = stack.pop() #最後乙個左葉

tmpnode = node.right #將右兒子作為子樹遍歷

#中序 def midorder(root):

if root == none:

return

stack =

tmpnode = root

while tmpnode or stack:

while tmpnode:

tmpnode = tmpnode.left

node = stack.pop()

print(node.val)

tmpnode = node.right

#後序 def latorder(root):

if root == none:

return

stack =

tmpnode = root

while tmonode or stack:

while tmpnode:

tmpnode = tmpnode.left

node = stack[-1]

tmpnode = mode.right

if node.right == none :

print(node.val)

node = stack.pop()

while node == stack[-1].right:

print(node.val)

node = stack.pop()

Python學習 第二遍

computer原指專門負責計算的人,後來演變成特指計算編譯,譯為計算機 計算機是能根據一組指令運算元據的機器。五大部件對應硬體 擴充套件 計算機的工作原理a b 程式語言的種類 常用的程式語言 anaconda工具的使用問題 如何利用python程式進行攝氏度和華氏度的轉換 步驟一 分析問題的計算...

Python實現二叉排序樹的建立及各種遍歷

嘗試用python實現樹的操作,避免了c c 複雜的語法及格式,更便於專注理解演算法本身的含義。如下 可直接執行 tree def createtree lis tree dict 用字典儲存二叉排序樹 root lis 0 設定根節點 for x in lis 遍歷節點列表 father root...

劍指offer 學習筆記 二叉搜尋樹的後序遍歷序列

面試題33 二叉搜尋樹的後序遍歷序列。輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果 只要存在乙個二叉搜尋樹的後序遍歷結果為它即可 如果是返回true,不是返回false。假設輸入陣列的任意兩個數字都不相同。後序遍歷得到的序列中,最後乙個數字是樹的根節點的值。陣列中前面的數字可分為兩部...