1. 程式人生 > 其它 >二叉樹的非遞迴遍歷(python)

二叉樹的非遞迴遍歷(python)

技術標籤:Pythonpython二叉樹

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None


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

    def set_children(self, left=None, right=None)
: self.left = left self.right = right class Tree(object): def __init__(self, tree_node=None): self.root = tree_node def pre_order(self): if self.root is None: return [] order = [] stack = [self.root] while len(stack) != 0:
temp_node = stack.pop() order.append(temp_node.val) if temp_node.right is not None: stack.append(temp_node.right) if temp_node.left is not None: stack.append(temp_node.left) return order def middle_order(self)
: order = [] stack = [] temp_node = self.root while temp_node is not None or len(stack) != 0: if temp_node is not None: stack.append(temp_node) temp_node = temp_node.left else: temp_node = stack.pop() order.append(temp_node.val) temp_node = temp_node.right return order def after_order(self): if self.root is None: return [] order = [] stack = [] stack.append(self.root) while len(stack) != 0: temp_node = stack.pop() order.append(temp_node.val) if temp_node.left is not None: stack.append(temp_node.left) if temp_node.right is not None: stack.append(temp_node.right) order.reverse() return order def sequence_order(self): if self.root is None: return [] order = [] stack = [] stack.append(self.root) while len(stack) != 0: temp_node = stack.pop(0) order.append(temp_node.val) if temp_node.left is not None: stack.append(temp_node.left) if temp_node.right is not None: stack.append(temp_node.right) return order node_1 = TreeNode(1) node_2 = TreeNode(2) node_3 = TreeNode(3) node_1.set_children(node_2, node_3) node_4 = TreeNode(4) node_2.set_children(node_4) node_5 = TreeNode(5) node_6 = TreeNode(6) node_3.set_children(node_5, node_6) node_7 = TreeNode(7) node_8 = TreeNode(8) node_5.set_children(node_7, node_8) tree = Tree(node_1) # 先序遍歷:[1, 2, 4, 3, 5, 7, 8, 6] print("先序遍歷:" + tree.pre_order().__str__()) # 中序遍歷:[4, 2, 1, 7, 5, 8, 3, 6] print("中序遍歷:" + tree.middle_order().__str__()) # 中序遍歷:[4, 2, 7, 8, 5, 6, 3, 1] print("後序遍歷:" + tree.after_order().__str__()) # 層序遍歷:[1, 2, 3, 4, 5, 6, 7, 8] print("層序遍歷:" + tree.sequence_order().__str__())