非递归遍历二叉树

class Node(object):
    def __init__(self, v):
        self.value = v
        self.left = None
        self.right = None


root = Node(1)

root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)


def inorder(root):
    current = root
    stack = []

    while True:
        if current:
            stack.append(current)
            current = current.left
        elif stack:
            current = stack.pop()
            print(current.value, end=' ')
            current = current.right
        else:
            break


def preorder(root):
    current = root
    stack = []

    while True:
        if current:
            stack.append(current)
            print(current.value, end=' ')
            current = current.left
        elif stack:
            current = stack.pop()
            current = current.right
        else:
            break


def postorder(root):
    current = root
    stack = []
    prev = None

    while True:
        if current:
            stack.append(current)
            current = current.left
        elif stack:
            current = stack[len(stack) - 1]

            if current.right is None or current.right == prev:
                print(current.value, end=' ')
                stack.pop()
                prev = current
                current = None
            else:
                current = current.right

        else:
            break


print(
    r'''
     1
    / \
   2   3
  / \
 4   5
'''
)


print('\n--------- Pre Order ---------------')

preorder(root)

print('\n--------- In Order ---------------')

inorder(root)

print('\n----------Post Order -------------')

postorder(root)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容