python树遍历非递归形式

class SStack():
    def __init__(self):
        self._elem = []

    def is_empty(self):
        return self._elem == []

    def top(self):
        if self.is_empty():
            return False
        else:
            return self._elem[-1]

    def push(self, e):
        self._elem.append(e)

    def pop(self):
        if self.is_empty():
            return False
        else:
            return self._elem.pop()

class Node:
    def __init__(self, elem=0, left=None, right=None):
        self.elem = elem
        self.left = left
        self.right = right

def proc_data(data):
    print(data.elem)

def preorder_tree(tree_node):
    if tree_node == None:
        return None
    ss = SStack()
    tmp = tree_node
    while tmp is not None or not ss.is_empty():
        while tmp is not None:
            proc_data(tmp)
            ss.push(tmp.right)
            tmp = tmp.left
        tmp = ss.pop()
        

def inorder_tree(tree_node):
    if tree_node == None:
        return False
    ss = SStack()
    tmp = tree_node
    while tmp is not None or not ss.is_empty(): #terminating conditions
        while tmp is not None:
            ss.push(tmp)
            tmp = tmp.left
        tmp = ss.pop()
        proc_data(tmp)
        tmp = tmp.right

def postorder_tree(tree_node):
    if tree_node == None:
        return False
    ss = SStack()
    tmp = tree_node
    while tmp is not None or not ss.is_empty():
        while tmp is not None:
            ss.push(tmp)
            tmp = tmp.left if tmp.left is not None else tmp.right
        tmp = ss.pop()
        proc_data(tmp)
        if not ss.is_empty() and ss.top().left == tmp:
            tmp = ss.top().right
        else:
            tmp = None
        

node1 = Node(1)
node2 = Node(2)
node3 = Node(3, node1, node2)
node4 = Node(4)
node5 = Node(5)
node6 = Node(6, node4, node5)
node7 = Node(7, node3, node6)


if __name__ == "__main__":              
    #postorder_tree(node7)
    #preorder_tree(node7)
    inorder_tree(node7)
    


猜你喜欢

转载自blog.csdn.net/z2539329562/article/details/80429604