二叉树的基本操作包括遍历、生成、删除、获得高度和节点数等。
对二叉树的节点定义如下数据结构:
struct tree_node{
char id;
struct tree_node *left;
struct tree_node *right;
};
typedef struct tree_node TreeNode;
typedef struct tree_node *Tree;
下面的描述都用下图所示的这棵二叉树为例。
1、二叉树的遍历
二叉树的遍历有四种方式:前序遍历、中序遍历、后序遍历、层序遍历。
1.1、前序遍历
先访问根节点,再分别前序遍历左、右两棵子树。前序遍历的结果是:ABCDEF
代码以递归方式实现:
//前序遍历
void PreShow(Tree T)
{
if (!T)
{
return;
}
printf("%c ", T->id);
PreShow(T->left);
PreShow(T->right);
}
1.2、中序遍历
先中序遍历左子树,然后访问根节点,最后中序遍历右子树。中序遍历的结果是:CBAEDF
//中序遍历
void MidShow(Tree T)
{
if (!T)
{
return;
}
MidShow(T->left);
printf("%c ", T->id);
MidShow(T->right);
}
1.3、后序遍历
先后序遍历左子树,再后序遍历右子树,最后访问根节点。后序遍历的结果是:CBEFDA
//后序遍历
void BackShow(Tree T)
{
if (!T)
{
return;
}
BackShow(T->left);
BackShow(T->right);
printf("%c ", T->id);
}
1.4、层序遍历
从根节点开始,逐层访问各子节点。层序遍历的结果