美文网首页
二叉树及其遍历

二叉树及其遍历

作者: MkTom | 来源:发表于2018-09-01 22:34 被阅读0次
  • 二叉树:每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)
  • 完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树
  • 满二叉树:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
class Node(object):

    def __init__(self, item):
        self.item = item
        self.lChild = None
        self.rChild = None


class Tree(object):

    def __init__(self):
        #记录根节点
        self.root = None

    def add(self, item):
        # 添加节点
        # 完全二叉树,从上到下,从左往右
        node = Node(item)
        if self.root is None:
            self.root = node
        else:
            # 从上到下,从左往右 使用队列
            queue = []
            queue.append(self.root)

            while queue:
                child = queue.pop(0)
                if child.lChild is None:
                    child.lChild = node
                    return
                if child.rChild is None:
                    child.rChild = node
                    return
                queue.append(child.lChild)
                queue.append(child.rChild)

深度优先一般用递归
广度优先一般用队列
一般情况下能用递归实现的算法大部分也能用堆栈来实现。

    # 广度优先遍历,层次遍历
    def breath_travel(self):

        if self.root is None:
            return
        queue = []
        queue.append(self.root)

        while queue:

            node = queue.pop(0)
            print(node.item, end=" ")

            if node.lChild is not None:
                queue.append(node.lChild)
            if node.rChild is not None:
                queue.append(node.rChild)

    # 深度优先遍历
    def depth_travel(self):
        self.post_order(self.root)
        print()

    # 先序 自己 左子树 右子树
    def pre_order(self, node):
        if node is None:
            return
        print(node.item, end=" ")
        self.pre_order(node.lChild)
        self.pre_order(node.rChild)

    # 中序  左子树 自己 右子树
    def in_order(self, node):
        if node is None:
            return
        self.in_order(node.lChild)
        print(node.item, end=" ")
        self.in_order(node.rChild)

    # 后序  左子树  右子树  自己
    def post_order(self, node):
        if node is None:
            return
        self.post_order(node.lChild)
        self.post_order(node.rChild)
        print(node.item, end=" ")

if __name__ == '__main__':
    tree = Tree()
    tree.add(0)
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
    tree.add(6)
    tree.add(7)
    tree.add(8)
    tree.add(9)

    # tree.breath_travel()
    tree.depth_travel()



相关文章

  • 哈希表与二叉树

    总览 实现二叉树及其遍历方式

  • 二叉树的遍历

    关于二叉树的算法问题,一般都以二叉树的遍历为基础,这里给出二叉树的多种遍历方式 树结构: 树结点的定义及其构建: ...

  • 算法学习

    数据结构学习笔记:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算算法学习笔记浅谈...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树及其遍历

    二叉树及其遍历 二叉树概念定义 什么是二叉树 二叉树特点是每个节点最多只能有两棵子树,且有左右之分的树。 注:关于...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

网友评论

      本文标题:二叉树及其遍历

      本文链接:https://www.haomeiwen.com/subject/bbcpwftx.html