一、定义
二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合可以是空集(也就是空二叉树),或者是由一个根结点和俩个互不相交的称为左子树和右子树的树组成。
二叉树具有5种形态:
- 空二叉树;
- 只有一个根节点;
- 根节点只有左子树;
- 根节点只有右子树;
- 根结点左右子树同时具备;
特殊二叉树:
-
斜树(只有左子树或者只有右子树);
-
满二叉树(所有结点都有左子树和右子树,并且所有的树叶在同一层上);
-
完全二叉树:
-
叶子结点只能出现在最下俩层;
-
最下层的叶子结点一定集中在左部连续位置;
-
倒数第二层的叶子结点一定集中在右部连续位置;
-
如果某一结点的度为1.那么该结点只有左结点;
-
同样结点数的二叉树,完全二叉树的深度最小。
二、性质
性质1:在二叉树的第i层,最多有2^(i-1)个结点,i>=1;
性质2:深度为k的二叉树,最多有2^k-1,k>=1;
性质3:任何一颗二叉树,叶子结点数=度为2的结点数+1;
性质4:计算子结点与双亲结点;
三、存储结构
- 顺序存储:一般用于完全二叉树;
- 连式存储:数据域与指针域;
四、二叉树的代码实现
main函数
#include<iostream>
#include"head.h"
#include <cstdlib>
using namespace std;
void main()
{
BiTree test;
//创建
cout << "请创建树:" << endl;
CreatBiTree(test);
//前序遍历
cout << endl << "前序遍历:";
PreOrderTraverse(test);
cout << endl << "中序遍历:";
MinOrderTraverse(test);
cout << endl << "后序遍历:";