二叉树
作者:互联网
二叉树
树的定义
树是由n(n \(\geq\) 0)个结点组成的有限集合。如果n=0,称为空树;如果n>0,则
- 有一个特定的称之为根(root)的结点,它只有直接后继,但是没有直接前驱
- 除根以外的其他结点划分为m(m \(\geq\) 0)个互不相交的有限集合\(T_0\),\(T_1\),...,\(T_{m-1}\),其中每个子集Ti(i=1,2,...,m)又是一颗树,并且称之为根的子树
树的特定
每颗子树的根结点有且只有一个直接前驱,但可以有0个或者多个直接后继。
树的常用术语(结合示意图理解):
- 结点:如A,B,C,D,E,F,G,H,J,K,L就是结点
- 结点的度:一个结点的后继的数目称为该结点的度。如A的度是3,B的是2,C的是1,J的是0
- 树的度:树中各结点度的最大值称为树的度。上图树的度为3
- 根结点:没有前驱,最顶层的那个结点。即A
- 双亲:即该结点的上层结点(直接前驱)parent。如A是B,C,D的双亲
- 孩子:即该结点的下层结点(直接后继)child。如B,C,D各自的双亲都是A
- 兄弟:同一双亲的孩子结点之间互称为兄弟。如结点B,C,D互为兄弟,E,F互为兄弟,J,K,L互为兄弟
- 堂兄弟:不同双亲但双亲在同一层的结点之间互称为堂兄弟。如G,H互为堂兄弟,E与G,H互为堂兄弟,F与G,H互为堂兄弟
- 祖先:从树的根结点到某一个结点X的路径上经历的所有结点(包括根结点但是不包括X结点)称为结点X的祖先。如A到L。A,D,H都是L的祖先
- 子孙:以某一结点X为根的子树上的所有非根结点(即除结点X外)称为结点X的子孙。如A下面的都是A的子孙。D下面的H,J,K,L都是D的子孙。E是A,B的子孙
- 叶子结点:即终端结点,没有子结点(后继)的结点,也是度为0的结点。如I,J,K,L是叶子
- 路径:从root结点找到该结点的路线
- 层:树的根结点所在的层为第1层,其余结点的层等于前驱结点的层加1
- 树的高度(深度)--- 最大层数,上图的树的高度为4
- 分支:从一个结点到期后继结点之间的连线称为一个分支。如A与B之间的连线就是一个分支,H与J的连接也是一个分支
- 路径:从一个结点(比如A)到另外一个结点(比如L)所经历的所有分支构成的连线称为结点A到结点L的路径
- 路径长度:一条路径上的分支数目称为路径长度。如A到L,路径长度为3
- 树的路径长度:从树的根节点到其他各个结点的路径长度之和称为树的路径长度。如上图的树的路径长度是23(1+1+1+2+2+2+2+3+3+3+3)
- 森林 :多颗子树构成森林
二叉树的概念
二叉树的定义
二叉树的定义采用递归定义方式
二叉树是由n(n \(\geq\) 0)个结点组成的有限集T。当n=0时,称为空二叉树。当n>0时,集合T必须满足如下条件:
- 有且仅有一个没有前驱的结点,该结点称为二叉树的根结点
- 将根结点除去后,其余结点可分为两个互不相交的子集T1,T2。 其中每个子集Ti(i=1,2)又是一颗二叉树,并分别称为根节点的左子树和右子树。
二叉树就是每个结点的度 \(\leq\) 2的有序树(左子树和右子树的次序不能颠倒),每个节点最多只能有两个子节点(不存在度大于2的结点)。
满二叉树
除了最后一层的结点为叶子结点外其他结点都有左、右两颗子树,则这棵二叉树为满二叉树。
完全二叉树
完全二叉树是指其结点与相同深度的满二叉树中的结点编号完全一致的二叉树。对于深度为k的完全二叉树,其前k-1层与深度为k的满二叉树的前k-1层完全一样,只是在第k层上有可能缺少右边若干个结点。
简单点理解就是,在完全二叉树中,除最后一层外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干若干,只可能缺少右边的若干结点。
满二叉树必定是完全二叉树,反之不一定
二叉树性质
性质1: 在二叉树的第i层上至多有\(2{^{i-1}}\)个结点(i>0)
性质2: 深度为k的二叉树至多有\(2{^{k-1}}\)个结点(k>0)
性质3:在二叉树中,若度为0的结点(即叶子结点)数为\(n_0\),度为2的结点数为\(n_2\),则\(n_0\)=\(n_2\)+1。
性质4:具有n个结点的完全二叉树其深度为\(\lfloor log2^n \rfloor\)+1(其中\(\lfloor log2^n \rfloor\)表示不大于\(log2^n\)的最大整数,即向下取整)
性子5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子(左子树的根结点)编号必为2i,其右孩子(右子树的根结点)编号必为2i+1;其双亲的编号必为\(\lfloor i/2 \rfloor\)(i=1 时为根,除外。其中\(\lfloor i/2 \rfloor\)表示不大于i/2的最大整数,即向下取整)
二叉树的递归遍历
利用树递归特性可以将二叉树进行递归遍历
- 先序遍历:先根 再左 再右(根左右)
- 中序遍历:先左 再根 再右(左根右)
- 后序遍历:先左 再右 再根(左右根)
标签:结点,称为,路径,后继,双亲,二叉树 来源: https://www.cnblogs.com/DarkH/p/15972075.html