一、二叉树的性质
- 一个二叉树第i层的最大结点数为:2i-1, i>=1。
- 深度为K的二叉树有最大结点总数:2k-1, k>=1。
- 叶结点个数n0 和度为2的非叶结点个数n2 的关系为:n0=n2 +1。
二、二叉树的存储结构
1. 顺序存储结构(数组)
一般二叉树虽然也可以通过补齐为完全二叉树来使用这种结构,但会造成大量空间浪费,所以通常采用链式存储。
2. 链表存储
定义一个二叉树
struct TreeNode {
int data;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : data(x), left(NULL), right(NULL) {
} //构造函数
};
三、二叉树的遍历
二叉树的遍历分为前序、中序、后序和层次遍历
1. 递归实现
//中序
void InorderTraversal( TreeNode* BT )
{
if( BT ) {
InorderTraversal( BT->Left );
/* 此处假设对BT结点的访问就是打印数据 */
printf("%d ", BT->Data); /* 假设数据为整型 */
InorderTraversal( BT->Right );
}
}
//前序
void PreorderTraversal( TreeNode* BT )
{
if( BT ) {
printf("%d ", BT->Data );
PreorderTraversal( BT->Left );
PreorderTraversal( BT->Right );
}
}