数据结构(一)二叉数的性质

前言:

一讲到二叉树,我们就会想到其不同于线性结构的,一个直接前驱多个直接后继的性质。

而且当我们学习完其性质时我们就可以通过它的性质进行一些计算。

首先我们了解:

相关概念:

  • 结点的度(Degree):结点的子树个数; 树的度:树的所有结点中最大的度数; 叶结点(Leaf):度为0的结点;
  • 父结点(Parent):有子树的结点是其子树的根节点的父结点;
  • 子结点/孩子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;
  • 兄弟结点(Sibling):具有同一个父结点的各结点彼此是兄弟结点;
  • 路径和路径长度:从结点n1到nk的路径为一个结点序列n,n2,…,nk。ni是ni+1的父结点。路径所包含边的个数为路径的长度;
  • 祖先结点(Ancestor):沿树根到某一结点路径上的所有结点都是这个结点的祖先结点;
  • 子孙结点(Descendant):某一结点的子树中的所有结点是这个结点的子孙;
  • 结点的层次(Level):规定根结点在1层,其他任一结点的层数是其父结点的层数加1;
  • 树的深度(Depth):树中所有结点中的最大层次是这棵树的深度; 满二叉树:树中除了叶子节点,每个节点都有两个子节点;
  • 完全二叉树:在满足满二叉树的性质后,最后一层的叶子节点均需在最左边;

二叉树性质:

  • 五个性质
  • 在二叉树的第i(i>=1)层最多有2i-1个结点;
  • 深度为k(k>=0)的二叉树最少有k个结点,最多有2k-1个结点;
  • 对于任一棵非空二叉树,若其叶结点数为n0,度为2的非叶结点数为n2,则n0 = n2 +1;
  • 具有n个结点的完全二叉树的深度为int_UP(log(2,n+1));
  • 如果将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号1,2,3,......,n,然后按此结点编号将树中各结点顺序的存放于一个一维数组,并简称编号为i的结点为结点i(i>=1 && i<=n),则有以下关系:**
    (1)若 i= 1,则结点i为根,无父结点;若 i> 1,则结点 i的父结点为结点int_DOWN(i / 2); (2)若 2*i <= n,则结点 i 的左子女为结点 2*i;
    (3)若2*i<=n,则结点i的右子女为结点2*i+1;
    (4)若结点编号i为奇数,且i!=1,它处于右兄弟位置,则它的左兄弟为结点i-1;
    (5)若结点编号i为偶数,且i!=n,它处于左兄弟位置,则它的右兄弟为结点i+1;
    (6)结点i所在的层次为 int_DOWN(log(2,i))+1。

题目:

一个完全二叉树有1000个结点,求他有几个叶子结点,几个度为2的结点?

法一

根据性质四先求出二叉树的深度 深度 K = 10 ;
然后因为为完全二叉树所以其前9层的总结点数为 29-1 = 511 个;
然后求得未层的叶子数为 1000 - 511 = 489 个 ;
最后再算倒数第二层的叶子数:
1.489/2 向上取整 得 245 为第9层没有子树的结点;
2.再求第9层所有的结点 根据性质一 29-1=256
3.256 - 245 = 11为除了末层外的叶子数;
最后得总叶子数 489+ 11 = 500
度为2的结点 根据性质二 100-500-1=499

法二

根据性质二
n0=n2+1
N=n0+n1+n2=1000
因为是完全二叉树则n1为0或1
N=1000则1000 = 2*n2+n1+1则因为n2为整所有n1=1
解得n2=499 n0=500

法三

根据二叉树的图解:根据性质五
对结点从上到下从左到右排序,最后一个结点的编号为1000且其一定是左孩子,因为左孩子的编号为其双亲编号的二倍为偶数,也可求出最后一个结点其双亲的编号为500;则500号以后的都为叶子结点 所有叶子结点为500个,则度为2的结点为1000减去叶子结点数再减去最后一个结点为499个

猜你喜欢

转载自blog.csdn.net/define_LIN/article/details/80448357