二叉树

  二叉树的非递归遍历

  

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("------------")
二叉树非递归操作

相关文章:

  • 2022-02-28
  • 2022-12-23
  • 2021-07-18
  • 2021-08-12
  • 2022-12-23
  • 2021-10-21
  • 2021-08-18
猜你喜欢
  • 2023-02-09
  • 2021-05-16
  • 2021-10-07
  • 2021-09-11
  • 2022-01-02
  • 2022-12-23
相关资源
相似解决方案