树的相关概念
-
结点 : 树中的⼀个独⽴单元. 包含⼀个数据元素及若⼲指向其他⼦树的分⽀. 例如, A,B,C,D等都是结点;
-
结点的度: 结点拥有的⼦树数称谓结点的度. 例如A的度是3, C的度为1, D的度为3, F的度为0.
-
树的度: 数的度是树内各结点度的最⼤值,例如,上图中的应该是3;
-
叶⼦: 度为0的结点称谓叶⼦或终端结点. 例如,K,J,F,G,M,I,J 都是树的叶⼦.
-
⾮终端结点: 度不为0的结点成为⾮终端结点或分⽀结点. 除了根结点以外,⾮终端结点也称为内部结点;
-
双亲和孩⼦: 结点的⼦树的根称为该结点的孩⼦, 相应地, 该结点称为孩⼦的双亲. 例如,B的双亲为A, B 的孩⼦有E和F.
-
兄弟: 同⼀个双亲的孩⼦之间称为兄弟结点, 例如H,I和J互为兄弟;
-
祖先: 从根到该结点所经历的分⽀上的所有结点, 例如, M的祖先为A,D,H.
-
⼦孙: 以某结点为根的⼦树中的任⼀结点都称为该结点的⼦树. 例如,B的⼦孙为E,F.
-
层次:结点的层次从根开始定义起, 根为第⼀层, 根的孩⼦为第⼆层. 树中任⼀层次等于双亲结点的层次 加1.
-
堂兄弟: 双亲在同⼀层的解答互为堂兄弟. 例如,结点G与E,F,H,i,J 互为堂兄弟.
-
有序树和⽆序树: 如果将树的结点的各⼦树看成从左到右是有次序的(即不能互换)则称为该树为有序树, 否则是⽆序树. 在有序树中最左边的⼦树的根称为第⼀个孩⼦,最右边的称为最后⼀个孩⼦. 什么叫有序 树,就类似在家谱中第⼀房太太,到第五房太太以及孩⼦是有顺序的.这样存在顺序关系叫有序树.
-
节点的⾼度: 节点到叶⼦节点的最⻓路径(边数)
-
节点的深度: 根结点到这个结点所经历的边的个数
-
节点的层数: 节点的深度-1
-
树的⾼度 : 根结点的⾼度. ⼆叉树(Binary Tree) 是n (n>=0)个结点所构成的集合. 它或为空树(n=0),对于⾮空树T:
-
有且仅有⼀个称之为根结点
-
除了根结点以外的其余结点分为2个互不相交的⼦集T1,T2. 分别称为T的左⼦树和右⼦树,且T1和T2本身都是⼆叉树.
⼆叉树的特性:
-
⼆叉树每个结点⾄多只有2颗⼦树(⼆叉树中不存在度⼤于2的结点). 所以⼆叉树中不存在⼤于2的结点. 注意: 不是只有2个⼦树,⽽是最多只有. 如果⼆叉树中没有⼦树或者只有⼀颗树是可以的.
-
⼆叉树的⼦树有左右之分,其次序不能任意颠倒.类似:就像⼈的双⼿,双脚.有顺序之分
-
即使只有⼀棵树,也需要区分是左⼦树还是右⼦树. 类似: 就像你在⽣活中,摔伤了⼿.伤的是左⼿还是右 ⼿,对你的⽣活影响都是完全不同的. 对⼀颗具有n个结点的⼆叉树按层序编号,如果编号为i(1=< i <= n)的结点与同样深度的满⼆叉树中编号为i 的结点⼆叉树中位置完全相同. 则这颗⼆叉树称为完全⼆叉树.
-
⾸先"完全" 和 "满" 的差异, 满⼆叉树⼀定是⼀个完全⼆叉树不⼀定是满的.
-
完全⼆叉树的所有结点和同样深度的满⼆叉树,它们按照层序编号相同的结点⼀⼀对应. 这⾥有⼀个关键词是按层序编号.
-
叶⼦结点只能出现在最下两层
-
最下层的叶⼦⼀定集中在左部连接
-
倒数第⼆层,若有叶⼦节点, ⼀定都在右部连续位置
-
如果结点度为1, 则该结点只有左孩⼦, 既不存在只有右⼦树的情况
-
同样结点数的⼆叉树, 完全⼆叉树的深度最⼩;
-
-
二叉树的遍历
前序遍历
若⼆叉树为空,则空操作返回; 否则先访问根结点,然后前序遍历左⼦树,在前序遍历右⼦树
中序遍历
若⼆叉树为空,则空操作返回; 否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左⼦树,然后是访问根结点,最后中序遍历右⼦树.
后序遍历
若⼆叉树为空,则空操作返回; 否则从左到右先叶⼦后结点的⽅式遍历左右⼦树,最后访问根结点
层序遍历
若⼆叉树为空,则空操作返回; 否则从树的第⼀层,也是就是根结点开始访问,从 上⽽下逐层遍历,在同⼀层中, 按从左到右的顺序对结点逐个访问.