Python 树的遍历递归和循环

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


###递归的形式   先序遍历  中序遍历  后序遍历
def preOrderRecursive(root):
    if root == None:
        return None
    print(root.val)
    preOrderRecursive(root.left)
    preOrderRecursive(root.right)


def midOrderRecursive(root):
    if root == None:
        return None
    midOrderRecursive(root.left)
    print(root.val)
    midOrderRecursive(root.right)


def latOrderRecursive(root):
    if root == None:
        return None
    latOrderRecursive(root.left)
    latOrderRecursive(root.right)
    print(root.val)


###循环的形式   先根遍历  中根遍历  后根遍历
###递归和循环可以互相转化

def preOrder(root):
    if root == None:
        return None
    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 None
    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 None
    stack = []
    tmpNode = root
    while tmpNode or stack:
        while tmpNode:
            stack.append(tmpNode)
            tmpNode = tmpNode.left

        node = stack[-1]
        tmpNode = node.right
        if node.right == None:
            print(node.val)
            node = stack.pop()
            while stack and node == stack[-1].right:
                node = stack.pop()
                print(node.val)


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

    preOrderRecursive(t1)
    print("---"*5)
    preOrder(t1)
    print("---"*5)
    midOrderRecursive(t1)
    print("---"*5)
    midOrder(t1)
    print("---"*5)
    latOrderRecursive(t1)
    print("---"*5)
    latOrder(t1)

运行结果为:

1
2
4
5
3
6
8
7
---------------
1
2
4
5
3
6
8
7
---------------
4
2
5
1
6
8
3
7
---------------
4
2
5
1
6
8
3
7
---------------
4
5
2
8
6
7
3
1
---------------
4
5
2
8
6
7
3
1
发布了135 篇原创文章 · 获赞 121 · 访问量 4866

猜你喜欢

转载自blog.csdn.net/weixin_44208324/article/details/105310927