zoukankan      html  css  js  c++  java
  • 满二叉树各种节点数目的计算

    1. 二叉树的基本性质

    • 二叉树的第i层至多有2i-1个结点(i>=1)

    证明:(归纳法)

       归纳基:i=1时,只有一个结点,2i-1=20=1;

       归纳假设:假设对所有的i命题成立;

       归纳证明:二叉树中每个结点最多有两个子树,则第i+1层的结点数为2*2i-2=2i-1.

    • 深度为h的二叉树至多有2h-1个结点(h>=1)

        证明:n=20+21+...+2h-1=2h-1.(等比数列)

    • 对于一棵二叉树,若含有n0个叶子结点,n2个度为2的结点,则必存在关系式:n2=n0-1

        证明:设二叉树的结点总数为n=n0+n1+n2;

           二叉树上的分支总数为b=n1+2n2;

                又b=n-1;

                故:n2=n0-1.

    • 具有n个结点的完全二叉树的深度为[log2n]+1.[]表示取整

        证明:设完全二叉树的深度为k,则:2k-1<=n<2k

           即k-1<=log2n<k

           因为k只能取整数,所以k=[log2n]+1.

    • 若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点:

        若i=1,则该结点是二叉树的根,无双亲,否则,编号为[i/2]的结点为其双亲结点;

        若2i>n,则该结点无左孩子结点,否则,编号为2i的结点为其左孩子结点;

        若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为其右孩子结点。

        证明:设完全二叉树中第i个结点的位置为第k层第j个结点,即i=2k-1-1+j;

           则左孩子结点的索引为:l=2k-1+2(j-1)+1=2*(2k-1-1+j)=2*i;

           左孩子结点的索引为:r=2k-1+2(j-1)+2=2*(2k-1-1+j)+1=2*i+1;

     2. 二叉树中各种结点数目的计算

      若一个完全二叉树的结点数目为n,求n0,n1,n2,数的高度h,左孩子结点数目nl和右孩子结点数目nr?

      (n0为度为0的结点,n1为度为1的结点,n2为度为2的结点)

      求解思路:

      树的高度h=[log2n]+1;

      因为是完全二叉树,所以1~h-1层全满;

      前h-1层的结点数目为nh-1=2h-1-1;

      第h层的叶子结点数目为nc1=n-nh-1;

      第h-1层的叶子结点数目为nc2=2h-2-ceil(nc1/2);(ceil为向上取整)

      所以n0=nc1+nc2;

      n2=n0-1;

      n1=n-n0-n2;

      左孩子结点数目nl=n2+n1;

      右孩子结点数目nr=n2;

  • 相关阅读:
    LeetCode_Search Insert Position
    LeetCode_Two Sum
    LeetCode_Merge Two Sorted Lists
    LeetCode_Pascal's Triangle
    spring中方法级验证参数
    Curator Recipes(Cache&Counter)
    [译]ZOOKEEPER RECIPES-Leader Election
    [译]ZOOKEEPER RECIPES-TWO PHASED COMMIT
    [译]ZOOKEEPER RECIPES-Locks
    [译]ZOOKEEPER RECIPES-Queues
  • 原文地址:https://www.cnblogs.com/jmliao/p/6706333.html
Copyright © 2011-2022 走看看