* 二叉树的基本操作*
递归实现先序 中序 后序 层序遍历
二叉树特点 :
每个节点最多有两个子树,二叉树不存在度大于2的节点
二叉树的子树有左右之分,其子树的次序不能颠倒
二叉树的存储
A 顺式存储
优点: 存储完全二叉树,简单省空间。
缺点: 存储一般二叉树尤其单支树,存储空间利用不高。
B 链式存储
优点:链式存储相对二叉树比较大的时候浪费空间较少。
缺点:但是读取某个指定节点的时候效率偏低O(nlogn) 。
//定义树的节点
typedef char Datatype;
typedef struct Bitnode
{
Datatype data; //数据域
struct Bitnode *lchild;
struct Bitnode *rchild;
}Bitnode, Bitree;
先序遍历(递归) :V L R
void priorTraverse(Bitree* tree)
{
if (tree == NULL)
{
return;
}
printf("%c", tree->data); //访问跟节点
priorTraverse(tree->lchild); //访问左子树
priorTraverse(tree->rchild); //访问右子树
}
中序遍历 (递归) :L V R
void inTraverse(Bitree *tree)
{
if (tree == NULL)
{
return;
}
priorTraverse(tree->lchild);
printf("%c", tree->data);
priorTraverse(tree->rchild);
}
后续遍历 (递归) :L R V
void laterTraverse(Bitree *tree)
{
if (tree == NULL)
{
return;
}
priorTraverse(tree->lchild);
priorTraverse(tree->rchild);
printf("%c", tree->data);
}
层序遍历(递归版)
int levelprint(Bitree *tree , int level)
{
if (tree = NULL || level < 0)
{ //非法输入
return 0;
}
if (level == 0) //我们把根节点当做第0层,之后层次依次增加,
{
printf(" %c ", tree->data);
return 1;
}
return levelprint(tree->lchild, level - 1) + levelprint(tree->rchild, level - 1);
}