面試題:棧實現dfs(不能遞歸)

遞歸實現很簡單,當時突然就懵了。記錄一下

核心:一直遍歷左根,如果沒有看右根,前序和中序簡單,同一套即可,輸出位置不一樣,後序特別注意需用另一stack逆序記錄

class Node:
    def __init__(self,value=None,left=None,right=None):
         self.value=value
         self.left=left    #左子樹
         self.right=right  #右子樹


def premidOrder(root):

    node = root
    stack = []
    while stack or node:
        while node:
            stack.append(node)
            #print(node.value)   # 前序
            node = node.left
        node = stack.pop()
        print(node.value)  # 中序
        node = node.right

def lastOrder(root):
    # 後序必須帶兩個stack
    node = root
    stack = [node]
    stack1= []
    while stack:
        node = stack.pop()
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
        stack1.append(node)
    print([nod.value for nod in stack1[::-1]])

node4 = Node(4)
node5 = Node(5)
node2 = Node(2,node4,node5)
node3 = Node(3)
root = Node(1,node2,node3)

# premidOrder(root)
lastOrder(root)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章