树和二叉树(一):认识树和二叉树

文章目录

    • 1.树的定义
    • 2.树的基本操作
    • 3.二叉树定义
    • 4.二叉树性质

1.树的定义

  • 树(Tree):n个结点的有限集.任意非空树中:

  • 有且仅有一个根(root)节点

  • 其余结点划分为多个互不相交的有限集,每个集合称为根节点的子树(sub_tree)

  • 树的表示法树和二叉树(一):认识树和二叉树_第1张图片

  • 图示法

  • 集合表示法

  • 广义表表示法

  • 缩进表示法
    树和二叉树(一):认识树和二叉树_第2张图片

  • 结点分类

  • 计算机角度:终端节点和非终端节点

  • 树的特征:根节点,分支节点,叶子结点

  • 族谱关系:双亲结点和孩子节点,祖先结点和子孙结点,兄弟结点和堂兄弟结点.

  • 结点的度:与该节点连接的孩子结点数目

  • 树的度:树的结点度的最大值

  • 深度

  • 结点的深度:从根节点开始到这个结点的层数

  • 树的深度:树的结点层次的最大值

  • 有序树和无序树

  • 有序树:子树从左到右有序

  • 无序树

  • 有向树与无向树

  • 有向树:树的每个分支有方向

  • 无向树

  • n元树:树的度为n的树

  • 位置树:一棵有向树,树中结点的孩子节点的位置不能改变

  • m叉树:树的度为m的有向位置树

  • 森林:m棵互不相交的树的集合

2.树的基本操作

  • InitTree(T)-------------构造一棵空树T
  • ClearTree(T)-----------清空树T
  • TreeEmpty(T)-----------判断是否为空树
  • TreeDepth(T)-----------树的深度
  • InsertChild(T,p,i,c)----数T中插入子树c,成为p指向的结点的第i棵子树
  • DeleteChild(T,p,i)-------删除数T的p指向的结点的第i棵子树
  • TraverseTree(T)-----------按照某个次序访问结点

3.二叉树定义

  • 二叉树:特殊有向树,二元位置树
  • 特点
  • 某个结点至多有两个孩子节点,某个孩子节点有自己的位置关系
  • 二叉树有左右之分,次序不能颠倒
  • 二叉树的形态

4.二叉树性质

二叉树有以下几个性质:TODO(上标和下标)

  • 性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)

证明:下面用"数学归纳法"进行证明。

  • 当i=1时,第i层的节点数目为2{i-1}=2{0}=1。因为第1层上只有一个根结点,所以命题成立。
  • 假设当i>1,第i层的节点数目为2{i-1}。这个是根据(01)推断出来的!
    下面根据这个假设,推断出"第(i+1)层的节点数目为2{i}“即可。
    由于二叉树的每个结点至多有两个孩子,故"第(i+1)层上的结点数目” 最多是 “第i层的结点数目的2倍”。即,第(i+1)层上的结点数目最大值=2×2{i-1}=2{i}。
    故假设成立,原命题得证!
  • 性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)

证明:在具有相同深度的二叉树中,当每一层都含有最大结点数时,其树中结点数最多。利用"性质1"可知,深度为k的二叉树的结点数至多为:
20+21+…+2k-1=2k-1
故原命题得证!

  • 性质3:包含n个结点的二叉树的高度至少为log2 (n+1)

  • 证明:根据"性质2"可知,高度为h的二叉树最多有2{h}–1个结点。反之,对于包含n个节点的二叉树的高度至少为log2(n+1)。

  • 性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

  • 证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)=“0度结点数(n0)” + “1度结点数(n1)” + “2度结点数(n2)”。由此,得到等式一。
    (等式一) n=n0+n1+n2
      另一方面,0度结点没有孩子,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:n1+2n2。此外,只有根不是任何结点的孩子。故二叉树中的结点总数又可表示为等式二。
    (等式二) n=n1+2n2+1
    由(等式一)和(等式二)计算得到:n0=n2+1。原命题得证!

  • 满二叉树

  • 定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。
    树和二叉树(一):认识树和二叉树_第3张图片

  • 性质5: 如果n个节点的完全二叉树的节点按照层次并按从左到右的顺序从0开始编号,对于任一个结点都有:

  • 序号为0的节点是根

  • 对于i>0,其父节点的编号为(i-1)/2。

  • 若2·i+1

  • 若2·i+2

  • 完全二叉树

  • 定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上。这样的二叉树称为完全二叉树。

  • 特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全二叉树未必是满二叉树。
    树和二叉树(一):认识树和二叉树_第4张图片

  • 二叉查找树

  • 定义:二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉查找树中的一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] <= key[x];如果y是x的右子树的一个结点,则key[y] >= key[x]。

树和二叉树(一):认识树和二叉树_第5张图片
在二叉查找树中:

  • (01) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • (02)任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • (03) 任意节点的左、右子树也分别为二叉查找树。
  • (04)没有键值相等的节点(no duplicate nodes)。

你可能感兴趣的:(数据结构(C语言),二叉树,数据结构,算法,powerdesigner)