二叉树
二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
二叉树有几点重要的性质:
- 性质1:在二叉树的第 i 层上至多有2i-1 个结点。 (i≥1)
- 性质2:深度为 k 的二叉树上至多含2k-1 个结点(k≥1)。
- 性质3:对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0 = n2+1。
- 性质4:具有 n 个结点的完全二叉树的深度为log2n+1
- 性质5:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:
(1) 若 i=1,则该结点是二叉树的根,无双亲,否则,编号为i/2 的结点为其双亲结点;
(2) 若 2i>n,则该结点无左孩子,否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点,否则,编号为2i+1 的结点为其右孩子结点。
采用链式存储结构实现二叉树
链式存储二叉树
1.首先我们要构造可以表示二叉树的节点的结构Binary_node
2.构造类二叉树 Binary_tree,并编写其几个基本的成员函数:
Empty()-检查树是否为空;clear()-将树清空;size()-得到树的大小;leaf_count()-得到叶子数目;height()-得到树高;
以及几个重要的成员函数:
3.分别编写遍历算法的成员函数