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)
python树遍历非递归形式
猜你喜欢
转载自blog.csdn.net/z2539329562/article/details/80429604
今日推荐
周排行