树的简介
树是一种非线性数据结构。由n(n>=0)个节点构成,第一个节点称为根节点。树是由根节点(唯一)+子树(m >= 0)组成且子树之间互不相交。
特点:元素间称为“一对多”关系,呈现分支、分层的形态。 最简单和常用的是二叉树。
树的基本概念
右边的树中A为根节点B、C、D为A的孩子,A为他们的父亲。B、C、D之间为兄弟。把以B、C、D为根节点的数称为子树。
森林:
m(m>=0)棵互不相交的树的集合。
任何一棵非空树可表示为一个二元组
Tree = (root,F)
二叉树
二叉树的递归定义:二叉树要么为空,要么由根节点(root)、左子树(left subtree)、右子树(right subtree)组成,而左子树和右子树分别是一颗二叉树。
二叉树的特点:
1.每个结点至多只有两棵子树 。
2.子树有左右之分,其次序不能任意颠倒,只有一棵子树时也必须分清左右子树 。
3.子树必须是二叉树。
二叉树的性质
性质1:
二叉树的第i层上至多有2^(i-1)个结点(i ≥ 1)。
性质2 :
深度为 k 的二叉树上至多含 2^k-1 个结点(k ≥ 1)。由等比数列求和公式得到(1 - 2^k) / (1-2) = 2^k-1。
满二叉树:深度为k且有2^k-1个结点的二叉树。
如图就是个4层满二叉树,必须符合这样的编号方式。
完全二叉树:
深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1到n的结点一一对应时,称为完全二叉树。就是说与满二叉树编号方式相同但是从右边可以有空子树。
性质3 :
具有 n 个结点的完全二叉树的深度为【log2n】 +1 。【】是取整。
证明:设完全二叉树的深度为 k
则根据第二条性质得 2^k-1≤ n < 2^k
即 k-1 ≤ log2 n < k
因为 k 只能是整数,因此,k =【log2n】 + 1 。
性质4 :
若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:
(1) 若 i=1,则该结点是二叉树的根,无双亲,
否则,编号为 【i/2】 的结点为其双亲结点;
(2) 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。
二叉树的存储
1.顺序存储
2.链式存储