从头再来----数据结构之层次建树的前中后序遍历(使用递归)
前序遍历(也叫先序遍历 是深度优先遍历)
先访问树的根结点
再访问树的左结点
(如果该左结点仍存在其左结点 则应该再次访问其左结点 将该左结点 视为根结点)
在访问树的右结点
(如果该右结点仍存在左结点则也应再次访问其左结点)
始终保持 根左右 进行遍历
//前序遍历
void preOrder(BiTree tree) {
//遍历 根左右
//使用递归
if (tree != NULL) {
printf("%c", tree->c);
preOrder(tree->LChild);
preOrder(tree->RChild);
}
}
中序遍历
先访问左结点
在访问根节点
最后访问右结点
//中序遍历
void inOrder(BiTree tree) {
//使用递归 左根右
if (tree != NULL) {
inOrder(tree->LChild);//先打印左子树
putchar(tree->c);//在打印根节点
inOrder(tree->RChild);//在打印右子树
}
}
后序遍历
先访问左结点, 在访问右结点
最后访问根结点
//后序遍历
void postOrder(BiTree tree) {
//使用递归 左右根
if (tree != NULL) {
postOrder(tree->LChild);//先打印左子树
postOrder(tree->RChild);//在打印右子树
putchar(tree->c);//打印根节点
}
}
主函数中调用方法
printf("\n---------------前序遍历------根左右---------abdhiejcfg\n");
preOrder(tree);//将层次建树 进行前序遍历
printf("\n---------------中序遍历------左根右---------hdibjeafcg\n");
inOrder(tree);//将层次建树 进行中序遍历
printf("\n---------------后序遍历------左右根---------hidjebfgca\n");
postOrder(tree);//将层次建树 进行后序遍历