数据结构——树和二叉树



    叶子结点:指的是度为0的结点(5,6,7,3,9,8为叶子结点);


    分支结点:除了叶子结点,其他的结点(包括根结点)称之为分支结点(1,2,4,8);



        叶子结点分支结点的关系:互补关系

        叶子结点+分支结点 = 总结点


    内部结点:在分支结点基础上,除去根节点,其余的就是内部结点(2,4,8);


    结点的度:结点的下一层有多少个相关联的结点就有多少个度;


            1的度为3,2的度为3,4的度为1,8的度为2,3的度为0;

    树的度:所有结点的度当中,度数最高的一个(3);


    (父结点子结点兄弟结点):是相对的量

    ps=>

        5结点相对2结点:它是子结点

        2结点相对5结点:他是父结点

        5结点相对6,7结点:它是兄弟结点

    也就是说。2为5,6,7的父结点。 5,6,7为2的子结点。5,6,7互为兄弟结点


    层次:这里有4层


    唯一没有计算入度的就是根结点;

    假设一棵树的总结点数为n,总度数为k,那么 n = k+1;


        练习01:


练习01

1.先求总结点数: n = 3*2+2*1+1 = 9;

最后得出结果C正确;

    树的遍历


        前序遍历:先访问根,再一次访问子结点;

            1-2-5-6-7-3-4-8-9-10


        后序遍历:先访问子结点,再访问根点

            5-6-7-2-3-9-10-8-4-1


        层序遍历:从层次遍历

            1-2-3-4-5-6-7-8-9-10


二叉树不是树的一种特殊情形,尽管其与树有许多相似之处,但树和二叉树有两个主要差别:

1. 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;

2. 树的结点无左、右之分,而二叉树的结点有左、右之分。

二叉树并不是特殊的树,而是一种独立的数据结构


二叉树

    满二叉树:二叉树上的所有结点都是充实的,饱满的,没有缺结点(完整的金字塔型);


    完全二叉树:把最后一层和前面若干层划分开,假如一颗完全二叉树有n层,前面的n-1层为满树,最后一层结点排列必须

    要有规律,从左到右排列


    非完全二叉树:缺少结点,且排列无顺序


    二叉树重要特征:


        1.在二叉树的第i层上最多有2^(i-1)个结点(i>=1);


        2.深度为k的二叉树最多有(2^k)-1个结点(k>=1);


        3.对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2.则n0 = n2+1;

            总结点数(n) = 总度数(k)+1  同样适用于二叉树;


        推导:

        =>  设一棵二叉树,它的叶子结点数n0个,度2的结点数n2,度1的结点数n1;

        那么:  n1+n2+n0 = 所有结点的总数 = k+1;

        然后:  k = n1*1+n2*2+n0*0;

        可得:  n1+n2+n0 = n1+n2*2+1 => n0 = n2+1;

二叉树特性:

    如果对一棵有n个结点的完全二叉树的结点按是层序编号(从第一层到 math.floor( log2^n )+1 层,每层从左到右 ),

    则对任一结点i ( 1<=i<=n ),有

        如果i=1,则结点i无父结点,是二叉树的根,如果i>1,则父结点是 math.floor( i/2 );


        如果2i>n,则结点i为叶子结点,无左子结点。否则,其左子结点是结点2i;


        如果2i+1>n,则结点i无右子结点,否则,其右子结点是结点2i+1;


练习02


练习02

利用公式进行换算,并且要知道完全二叉树度数为1的结点个数要么没有(0),要么只有一个(1);

n1+n2+n0 = 总结点数;

因为:n0 = n2+1; ==> n2 = n0-1;

所以所得    n1 + 2n0 = 768

最后答案为B;

二叉树的遍历:


二叉树的遍历

    前序遍历:先访问根,再一次访问子结点;

        1-2-4-5-7-8-3-6


    中序遍历:先访问左结点,再访问根结点,再访问右结点;

        4-2-7-8-5-1-3-6


    后序遍历:先访问左结点,再访问右结点,再访问根结点;

        4-8-7-5-6-2-3-1


    层序遍历:从层次遍历;

        1-2-3-4-5-6-7-8


练习03


练习03

答案:C

树与二叉树的转换:


树转二叉树

    1.先把一棵树的全部左子结点留下,右子结点线划掉;


    2.把兄弟结点连接起来,不同父结点的兄弟结点不需要连;


转换后的二叉树和之前的树比较:

    前序遍历两者相同

    前序遍历:1-2-3-5-6-7-4-8-9


    二叉树的中序遍历 = 树的后序遍历

    二叉树的中序遍历:2-5-6-7-3-8-9-4-1

    树的后序遍历:2-5-6-7-3-8-9-4-1


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容