二叉树的度是指树中所以结点的度数的最大值。二叉树的度小于等于2,因为二叉树的定义要求二叉树中任意结点的度数(结点的分支数)小于等于2 。

1 基本概念
  • 二叉树是树形结构中一种特殊的树形结构:二叉树中的每个结点至多有2棵子树(即每个结点的度小于等于2),并且两个子树有左右之分,顺序不可颠倒。
  • 在二叉树中还有种特殊的二叉树就是完全二叉树:度为1的N1只有0个或1个称之为完全二叉树。
  • 所有结点中除了叶子结点以外的结点都有两棵子树的完全二叉树称为满二叉树。
2 重要性质
  • 二叉树中,第m-层最多有2^(m-1)个结点(根结点为第一层)

  • 高度为k的二叉树至多有2^k-1个结点

  • 二叉树T叶子结点总数为n0,度为2的结点个数为n2,则n0=n2+1

  • 如果完全二叉树有n个结点,那么树最高为log2(n)+1

  • 对于完全二叉树,从上至下,从左至右对每个结点从1-n编号,那么对于结点n有:

    如果i=1,那么此结点为根结点,如果i>1那么该结点的父结点为不大于i/2的最大整数

    如果2i>n,那么i结点没有左子树,如果2i<=n那么该结点的左子树编号为2*i

    如果2i+1>n,那么结点i没有右子树,如果2i+1<=n那么该结点的右子树编号为2*i+1

例如:

比如一棵二叉树有10个度为1的节点,7个度为2的节点,则二叉树有多少个节点(25)

根据刚才说的,节点数比度数多1,可以列出计算式子:

10 * 1 + 7 * 2 + 1 = 25

分支数: 有多少条边
3 基本操作集合
InitBitTree(&T):初始化二叉树为一棵空树

CreateBitTree(&T):创建二叉树

DestroyBitTree(&T):删除二叉树

InsertLeftChild(p,c):将二叉树c插入到p所指向的左子树

InsertRightChild(p,c):将二叉树c插入到p所指向的右子树

LeftChild(&T,e):返回左孩子

RightChild(&T,e):返回右孩子

DeleteLeftChild(&T,p):删除左孩子

DeleteRightChild(&T,p):删除右孩子

PreOrderTraverse(T):前序遍历二叉树

InOrderTraverse(T):中序遍历二叉树

PostOrderTraverse(T):后序遍历二叉树

LeverTraverse(T):层次遍历二叉树

BitTreeDepth(T):求二叉树的高度
4 存储方式

顺序存储:完全二叉树中每个结点的编号可以通过性质求得,所以可以将元素按从上至下、从左至右的顺序放入一维数组中。而对于非完全二叉树,则只需要将相对于完全二叉树缺失的结点用“^"代替。

链式存储:二叉树的链式存储需要三个域存储:数据域、左孩子指针域和右孩子指针域。两个指针域分别指向左右子树。这种存储结构叫做二叉链表存储。如果再加上一个指向父结点的指针域那么就称为三叉链表存储。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐