[学习笔记] Python实现树的遍历 (DFS)

六眼飞鱼酱① 提交于 2020-02-03 18:27:37

学习了通过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()
                    
                
            
            

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!