数据结构——树和二叉树的基本概念

树是一种非线性结构,是递归结构。

树的基本术语:

  1. 树结点:包含一个数据元素及若干指向子树的分支;
  2. 孩子结点:结点的子树的根称为该结点的孩子;
  3. 双亲结点:B结点是A结点的孩子,则A结点是B结点的双亲;
  4. 兄弟结点:同一双亲的孩子结点;
  5. 堂兄结点:同一层上结点;
  6. 结点层次:根结点的层定义为1;根的孩子为第二层结点,依此类推;
  7. 树的高(深)度:树中最大的结点层
  8. 结点的度:结点子树的个数
  9. 树的度: 树中最大的结点度。
  10. 叶子结点:也叫终端结点,是度为0的结点;
  11. 分枝结点:度不为0的结点(非终端结点);
  12. 森林:互不相交的树集合;
  13. 有序树:子树有序的树,如:家族树;
  14. 无序树:不考虑子树的顺序;

二叉树

    二叉树可以为空。二叉树结点的子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树,还是右子树。这是二叉树与树的最主要的差别。注意区分:二叉树、二叉查找树/二叉排序树/二叉搜索树、二叉平衡(查找)树

    二叉平衡树肯定是一颗二叉排序树。堆不是一颗二叉平衡树。

    二叉树与树是不同的,二叉树不等价于分支树最多为二的有序树。当一个结点只包含一个子节点时,对于有序树并无左右孩子之分,而对于二叉树来说依然有左右孩子之分,所以二叉树与树是两种不同的结构。

二叉树的性质

  1. 在二叉树的第 i 层上至多有2i-1个结点。
  2. 深度为 k 的二叉树上至多含 2k-1 个结点(k≥1)
  3. 对任何一棵二叉树,若它含有n0个叶子结点、n2个度为 2 的结点,则必存在关系式:n0= n2+1。
  4. 具有 n 个结点的完全二叉树的深度为⎣log2 n⎦+1 。
  5. n个结点的二叉树中,完全二叉树具有最小的路径长度。
  6. 如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=i<=n),有: 
    1. 如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲的编号是 i/2(整除)。
    2. 如果2i>n,无左孩子;否则,其左孩子是结点2i。
    3. 如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。

二叉树的存储结构

  1. 顺序存储结构:仅仅适用于满或完全二叉树,结点之间的层次关系由性质5确定。
  2. 二叉链表法:每个节点存储左子树和右子树。三叉链表:左子树、右子树、父节点,总的指针是n+2
  3. 在有n个结点的二叉链表中,值为非空的链域的个数为n-1。在有N个结点的二叉链表中必定有2N个链域。除根结点外,其余N-1个结点都有一个父结点。所以,一共有N-1个非空链域,其余2N-(N-1)=N+1个为空链域。
  4. 二叉链存储法也叫孩子兄弟法,左指针指向左孩子,右指针指向右兄弟。而中序遍历的顺序是左孩子,根,右孩子。这种遍历顺序与存储结构不同,因此需要堆栈保存中间结果。而中序遍历检索二叉树时,由于其存储结构跟遍历顺序相符,因此不需要用堆栈。

猜你喜欢

转载自blog.csdn.net/weixin_42562514/article/details/85109827