二叉树
二叉树的非递归遍历
class Node: def __init__(self, value): self.left = self.right = None self.value = value # 二叉树非递归操作 class Tree(): def __init__(self): self._root = None def isEmpty(self): return True if self._root is None else False def add(self, element): node = Node(element) if self.isEmpty(): self._root = node else: _node_list = [self._root] while True: cur_node = _node_list.pop(0) if cur_node.left is None: cur_node.left = node break elif cur_node.right is None: cur_node.right = node break else: _node_list.append(cur_node.left) _node_list.append(cur_node.right) def bfs(self): _node_list = list() _stack = list() _cur_node = self._root while True: if _cur_node: _node_list.append(_cur_node) if _cur_node.left: _stack.append(_cur_node.left) if _cur_node.right: _stack.append(_cur_node.right) if len(_stack): _cur_node = _stack.pop(0) else: return ','.join([str(node.value) for node in _node_list]) if _node_list else None def dfs_dlr(self): _node_list = list() _stack = list() _cur_node = self._root while True: if _cur_node: _node_list.append(_cur_node) if _cur_node.right: _stack.append(_cur_node.right) if _cur_node.left: _stack.append(_cur_node.left) if len(_stack): _cur_node = _stack.pop() else: return ','.join([str(node.value) for node in _node_list]) if _node_list else None def dfs_ldr(self): _node_list = list() _stack = list() _cur_node = self._root while True: if _cur_node: _stack.append(_cur_node) _cur_node = _cur_node.left elif len(_stack): _cur_node = _stack.pop() _node_list.append(_cur_node) _cur_node = _cur_node.right else: return ','.join([str(node.value) for node in _node_list]) if _node_list else None def dfs_lrd(self): _node_list = list() _stack = list() _cur_node = self._root while True: if _cur_node: _node_list.append(_cur_node) if _cur_node.left: _stack.append(_cur_node.left) if _cur_node.right: _stack.append(_cur_node.right) if len(_stack): _cur_node = _stack.pop() else: return ','.join([str(node.value) for node in _node_list[::-1]]) if _node_list else None tree = Tree() for i in range(1, 10): tree.add(i) print("层级遍历:", tree.bfs()) print("先序遍历:", tree.dfs_dlr()) print("中序遍历:", tree.dfs_ldr()) print("后序遍历:", tree.dfs_lrd()) print("------------")