二叉树
1)概念
二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成;
2)性质
二叉树第i(i≥1)层上的节点最多为2i-1个。
深度为k(k≥1)的二叉树最多有2k-1个节点。
在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一。
总节点数为各类节点之和:n = n0 + n1 + n2
总节点数为所有子节点数加一:n = n1 + 2*n2 + 1
故得:n0 = n2 + 1 ;
满二叉树 :深度为k(k≥1)时有2k-1个节点的二叉树。
完全二叉树 :只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。
具有n个节点的完全二叉树的深度为
(log2n)+1或『log2(n+1)。
3)遍历(重点)
递归遍历:先序 中序 后序;
层次遍历:非递归遍历;
代码实现:
二叉树的函数声明:
#ifndef TREE_H
#define TREE_H
typedef int tree_t;
//二叉树结点类型定义
typedef struct node{
tree_t data;
struct node *lchild;//左节点指针
struct node *rchild;//右节点指针
}Tree_t;
Tree_t *bitree_is_create(int i, int n);
void preorder(Tree_t *root);
void inorder(Tree_t *root);
void postorder(Tree_t *root);
void noorder(Tree_t *root);
#endif
二叉树的函数实现: