1111

130 阅读4分钟
    // 5.1 树的基本概念

    // 5.1.1 树的定义

    // 5.1.2 基本术语

    // 5.1.3 树的性质
    //      常用性质:总结点数 = n(0) + n(1) + n(2) + ... + n(m)
    //              总分支数 = 1n(1) + 2n(2) + ... + mn(m)
    //              总结点数 = 总分支数 + 1





    // 5.2 二叉树的概念

    // 5.2.1 二叉树的定义及其主要特性
    //      1. 二叉树的定义
    //        1)定义:二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒
    //        2)二叉树与度为2的有序树的区别:
    //      2. 几个特殊的二叉树
    //        1)满二叉树:高度为h,结点数为:2的h次方 - 1
    //        2)完全二叉树:
    //        3)二叉排序树:
    //        4)平衡二叉树
    //      3. 二叉树的性质
    //        1)非空二叉树上的叶子结点数等于度为2的结点数加1(拓展到任意一颗树,若结点数量为n,则边的数量为n-1)
    //        2)非空二叉树上第K层上至多有2的(k-1)次方个结点(k>=1)
    //        3) 高度为h的二叉树至多有2的k次方减1个结点
    //        4)对完全二叉树按从上到下、从左到右的顺序依次编号1,2,...,n,则有以下关系:
    //        5)具有n个结点的完全二叉树的高度为:

    // 5.2.2 二叉树的存储结构
    //      1. 顺序存储结构
    //        1)二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素
    //        2)从存储空间利用率方面考虑,比较适合完全二叉树和满二叉树
    //      2. 链式存储结构
    //        1)由于顺序存储的空间利用率较低,因此二叉树一般都采用链式存储结构
    //        2)二叉树的链式存储结构描述:
    //            typedef struct BiTNode {
    //                ElemType data;
    //                struct BiTNode *lchild, *rchild;
    //            }BiTNode, *BiTree;
    //        3)重要结论:含有n个结点的二叉链表中,含有n+1个空链域
    
    
    
    
    // 1. C
    // 2. A
    // 3. B
    // 4. C
    // 5. C (1,2,4,8,16,32, = 31 + 32 = 63)
    // 6. C (n=3;m=2,1;)
    // 7. C
    // 8. C (1,2,2,2,2,2,2,2)
    // 9. D
    // 10. A(1+2+4+8+16 = 31)
    // *11. A
    // 12. A (14 + 3 = 17 )
    // 13. D
    // 14. C
    //      9 512-1 = 511
    //      10 1024-1 = 1023
    //      9: 256: 256-129 = 127
    //      10: 768-511 = 257; 257/2=128.5=129;
    //      127+257=384
    // 15. C 
    //      1,1
    //      2,3
    //      4,7
    //      8,15
    //      16,31
    //      32,63
    //      64,127
    //      128,256
    // 16. A
    //      n0 = n2 + 1; 
    //      n2 = n0 -1 = 124 -1 = 123; 
    //      n0= 124;
    //      124 + 123 = 247
    // 17. B
    // 18. A
    // 19. C
    //      1,1
    //      3,4
    //      9,13
    //      27,40
    //      81,121
    // 20. D
    //      no = n2 + 1;
    //      n2 = n0 - 1 = 116 - 1 = 115
    //      n0 = 116
    //      n1 = 2011 - 115 - 116 = 2011 - 231 = 1780
    //      n1 + n0 = 1780 + 116 = 1896
    // 21. D
    // 22. A
    //      n0 = n2 + 1;
    //      n2 = n0 - 1 = k - 1;
    //      n0 + n2 = k + k - 1 = 2k - 1
    // 23. B
    //      1,2,4,8,16 = 31
    //              1
    //            2   3
    //         4    5
    //       6   7 8  9
    //    10



    // 1. 在一棵完全二叉树中,含有n0个叶子结点,当度为1的结点数为1时,该树的高度是多少?当度为1的结点数为0时,该树的高度是多少?

    // 设高度为h

    // 当度为1的结点数为1时
    // n0 = n2 + 1
    // n2 = n0 -1
    // n1 = 1
    // n = n0 + n1 + n2 = n0 + 1 + n0 - 1 = 2 n0
    // n = 2(h) - 1
    // 2 n0 = 2(h) - 1   =>   log2(2 n0 + 1)

    // 当度为1的结点数为0时
    // n = n0 + 0 + n0 - 1 = 2 n0 - 1
    // 2 n0 - 1 = 2(h) - 1
    // h = log2(2 n0)




    // 2. 一棵有n个结点的满二叉树有多少个分支结点和多少个叶子结点?该满二叉树的高度是多少?

    // 设度为0的结点有n0个,度为2的结点有n2个
    // n0 = n2 + 1
    // n = n0 + n2
    // n = 0 * n0 + 2 * n2 + 1 = 2 * n2 + 1
    // =>
    // 分支结点:n2 = (n-1)/2
    // 叶子结点:n0 = n/2 - 1/2 + 1 = (n+1)/2
    // 高度:h = log2(n+1)




    // 3. 已知完全二叉树的第9层有240个结点,则整个完全二叉树有多少个结点?有多少个叶子结点?

    // 前8层共有结点数:2(8)-1 = 256 - 1 = 255
    // 第9层最多有结点数2(8)= 256
    // 由于240 < 256,故该二叉树共有9层,即高度h=9
    // 该二叉树总的结点数n = 255 + 240 = 495

    // 第8层结点总数:2(7) = 128
    // 第8层的叶子结点:128 - 240/2 = 128 - 120 = 8
    // 总的叶子结点数:240 + 8 = 248




    // 4. 满m叉树,高度为h

    // 1)第h层的结点个数是:m(h-1)(h>=1)
    // 2) i/m向下取整
    // 3)mi + k - 1
    // 4) 条件:i % m < m - 1
    //    右兄弟结点编号:j = i + 1,2,...,(m-1) 且 j % m <= m - 1



    // 5. 已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近的公共祖先结点的值