树结构
一、 树
1. 树的定义
树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素;它是n(n>=0)个结点的有限集合,当n=0时称为空树。在任意飞空树中有且仅有一个称为根的结点;
树的基本概念
a. 双亲、孩子和兄弟。结点的子树的根称为该结点的孩子,该结点称为其子结点的双亲(parent)。具有相同双亲的结点互为兄弟。
b. 结点的度。一个结点的子树的个数即为该结点的度。度数最大的结点的度称为树的度。
c. 叶子节点。度为0的节点,也称终端结点。
d. 内部结点。度不为0的节点(包括根节点),也称分支结点或非终端结点。除根节点以外,分值结点也称为内部结点。
e. 结点的层次。根为第一层,根的孩子为第二层,依此类推。
f. 树的高度。一棵树的最大层数记为树的高度(或深度)。
g. 有序(无序)树。若将树中结点的各子树看成是从左到右具有次序的,即不能交换,则称为改树为有序树,否则称为无序树。
树的遍历:
前序遍历:125673489(10)
后序遍历:567239(10)841
层次排列:123456789(10)
2. 二叉树的定义
二叉树是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根节点及两棵不相交的且分别称为左、右子树的二叉树所组成。
二叉树和树是两个完全不同的概念,二叉树并不是特殊的树,树和二叉树的区别如下:
a. 二叉树中结点的子树要区分左子树和右子树,即使在结点只有一颗子树的情况下,也要明确指出该子树是左子树还是右子树。
b. 二叉树结点最大度为2,而树中不限制结点的度数。
二叉树的性质:
a. 二叉树第i层(i>=1)上最多有2i-1个结点。
b. 高度为k的二叉树最多有2k-1个结点(k>=1)。
c. 对于任何一颗二叉树,若其终端节点数为n0,度为2的结点数为n2,则n0=n2+1。
d. 具有n个结点的完全二叉树的深度为⌊log2n⌋+1(“⌊⌋”表示向下取整)。
e. 对一棵有n个结点的完全二叉树的所有结点按层次自上而下、自左至右进行编号,则对于在任一结点i(1<=i<=n)有:
① 若i=1,则结点i是二叉树的根,无双亲;若i>1,则其双亲为⌊i/2⌋。
② 若2i>n,则结点i没有左孩子,否则其左孩子为2i。
③ 若2i+1>n,则结点i没有右孩子,否则其右孩子为2i+1。
满二叉树、完全二叉树、非完全二叉树:
二叉树的遍历:
前序遍历:12457236
中序遍历:42785136
后序遍历:48752631
层次遍历:12345678
所谓的前、中、后指的是根节点的访问顺序。中序遍历中根节点左边的都是它的左子树结点,右边都是右子树结点;同样,将2看做左子树的根节点的时候,2左边的都是它的左子树结点,右边的也都是它的右子树结点,依此类推。
3. 二叉树和树的转换
请移步:树转换为二叉树小技巧