树ADT(抽象数据类型),元素的顺序不是考虑的重点。如果需要用到元素的顺序信息,那么可以使用链表、栈、队列等线性数据结构。
祖先结点:从根结点到达结点q的路径,且结点p出现在这条路径上,那么就可以把结点p叫做结点q的祖先结点,结点q也叫做p的子孙结点。
结点的大小:子孙的个数,包括其自身。
树的层:根结点位于0层。
结点的深度:从根结点到该结点的路径长度。(注意:是路径)
结点的高度:从该结点到最深结点的路径长度。只含有根结点的树,高度为0.
斜树:如果树中除了叶子结点外,其余每一个结点只有一个孩子结点。分为左斜树和右斜树。
二叉树:每个结点有0、1或者2个孩子结点。空树也是一个棵有效的二叉树。
严格二叉树:二叉树中的每个结点要么有两个孩子结点,要么没有孩子结点。
满二叉树:二叉树中的每个结点恰好有两个孩子结点且所有孩子结点都在同一层。
完全二叉树:在定义完全二叉树之前,假定二叉树的高度为h。对于完全二叉树,如果将所有结点从根结点开始从左至右,从上到下,依次编号(假定根结点的编号为1),那么将得到从1-n(n为结点总数)的完整序列。在遍历过程中对于空指针也应赋予编号。如果所有叶子结点的深度为h 或者h-1,那么结点编号序列中没有漏掉任何数字,那么这样的二叉树叫完全二叉树。
二叉树的性质:P113
二叉树的结构:
对于给定的两个或者多个结点,找出他们最近公共祖先(Least Common Ancestor, LCA)
二叉树垂直和:
通用树的结构: