学习了通过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)
stack.append(tmpNode)
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:
stack.append(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:
stack.append(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()
来源:CSDN
作者:KiligHh
链接:https://blog.csdn.net/KiligHuangHui/article/details/104158331