树、二叉树、满二叉树、完全二叉树、森林

1、基本术语:

度:有两种度“结点的度”与“树的度”。结点的度指的是一个结点子树的个数;树的度是指树中结点度的最大值。

叶子结点:指的是没有子树的结点

层:树是有层次的,一般根结点为第0层。规定根结点到某结点的路径长度为该结点的层数。

深度:树中结点的最大层数

兄弟:同一双亲的结点,互为兄弟

堂兄弟:双亲在同一层次的结点,互为堂兄弟

祖先:从根结点到该结点的路径上的所有结点都是该结点的祖先。

子孙:以某一结点为根的子树上的所有结点都是该结点的子孙

森林:n棵互不相交的树

 

2、二叉树:

不同于树,结点的度<=2,而且子树有左右之分,如下图:

编号规则为从左到右、从上到下

 

 

 

性质1:位于第i层的结点个数不大于2的i次方。

性质2:二叉树的深度为n,二叉树总的结点个数不大于2的n+1次方减去1。

性质3:叶子节点个数 = 度为2的结点个数 + 1

 

 

满二叉树:除了最底层的结点外,其余结点的度均为2,如下图

 

完全二叉树:不一定满,若一个二叉树有n个结点,他与满二叉树编号为1-n的结点一一对应。这样的二叉树称为完全二叉树

性质1:编号为i的结点的双亲编号为i/2,结果取整

性质2:便哈为i的结点的左孩子编号为2i,右孩子编号为2i+1

性质3:完全二叉树的结点总数为n,则该完全二叉树的高为log以2为底求n的对数,结果取整

 

 

二叉树的遍历:

先根遍历:DLR 首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

中根遍历:LDR 首先遍历左子树然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。

后根遍历:LRD 首先遍历左子树然后遍历右子树,最后访问根结点。在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。

 

 

树如何转换成二叉树?

 

步骤1:仅保留最左边孩子与根节点的连线,并连接兄弟结点。如下图,B是A最左边的孩子,所以保留A与B的连线,断开A与C,A与D的连线。B、C、D是兄弟,所以将BCD连接起来。对于以B、C、D为根的子树仍然按照这样的规则转换。

步骤2:左子树顺时针旋转45度,便得到了转换后的二叉树

 

 

二叉树如何转换成树?

步骤1:与树转换成二叉树的步骤相反,左子树逆时针旋转45度

步骤2:断开兄弟之间的连线,连接双亲。

 

森林如何转换成二叉树?

步骤1:每棵树都先转换为二叉树

步骤2:以第一棵树的根结点为根结点,将根结点依次连接起来

步骤3:按照根结点顺时针旋转45度

 

二叉树如何转换成森林?

步骤1:断开根结点与右子树的连线,对于右子树仍然按照规定断开与右子树的连线。这样得到多个二叉树

步骤2:将每棵二叉树转换为树

 

posted @ 2018-01-09 11:18  渐渐遗忘者  阅读(741)  评论(0编辑  收藏  举报