二叉树 Binary Tree

来源:互联网 发布:情趣女王魏道道淘宝 编辑:程序博客网 时间:2024/05/16 06:14
 在计算机科学中,二叉树是每个节点最多有两个子树树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树二叉堆

树和二叉树的三个主要差别:

  1. 树的结点个数至少为1,而二叉树的结点个数可以为0;
  2. 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;
  3. 树的结点无左、右之分,而二叉树的结点有左、右之分。

<完全二叉树和满二叉树>

  1. 满二叉树:一棵深度为k,且有2^k-1个节点成为满二叉树
  2. 完全二叉树:深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中序号为1至n的节点对应时,称之为完全二叉树

FullBT CompleteBT.jpg

 Complete Binary TreeFull Binary Tree总节点k2^{h-1}< k < 2^h-1k = 2^h-1树高hh =  log_2k+1h = log_2(k+1)

前(先)序、中序、后序遍历


遍历二叉树:L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则先(根)序遍历二叉树的顺序是DLR,中(根)序遍历二叉树的顺序是LDR,后(根)序遍历二叉树的顺序是LRD。还有按层遍历二叉树。这些方法的时间复杂度都是O(n),n为结点个数。


Bitree.JPG用二叉树表示下述表达式:a+b*(c-d)-e/f 
  • 先序遍历的串行是:-+a*b-cd/ef
  • 中序遍历的串行是:a+b*c-d-e/f
  • 后序遍历的串行是:abcd-*+ef/-

深度优先遍历

在深度优先级中,我们希望从根结点访问最远的结点。和图的深度优先搜索不同的是,不需记住访问过的每一个结点,因为树中不会有环。前序,中序和后序遍历都是深度优先遍历的特例。参见深度优先搜索。

广度优先遍历

和深度优先遍历不同,广度优先遍历会先访问离根节点最近的节点。参见广度优先搜索。 二叉树的广度优先遍历又称按层次遍历。算法借助队列实现。