二叉树的先序、中序、后序遍历,采用递归实现。
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
//定义二叉树类型的节点
typedef struct BTnode{
DataType data;//数据域
struct BTnode* lchild,*rchild;//左孩子和右孩子
}BTree;
//创建二叉树,以先序的方式输入,如果左孩子或右孩子为空,则输入#
/*
例子 A 输入为:ABD##E##CF###
/ \
B C
/ \ /
D E F
*/
void createBTree(BTree * &t)
{
char c;
c=getchar();
if(c=='#')
t=NULL;
else
{
t=(BTree*)malloc(sizeof(BTree));
t->data=c;
createBTree(t->lchild);//创建左子树
createBTree(t->rchild);//创建右子树
}
}
//先序遍历
void preOrder(BTree *root)
{
if(NULL!=root)
{
printf("%c ",root->data);//先访问根节点
preOrder(root->lchild);//再先序遍历左子树
preOrder(root->rchild);//最后先序遍历右子树
}
}
//中序遍历
void inOrder(BTree *root)
{
if(NULL!=root)
{
inOrder(root->lchild);//先中序遍历左子树
printf("%c ",root->data);//再访问根节点
inOrder(root->rchild);//最后中序遍历右子树
}
}
//后序遍历
void postOrder(BTree *root)
{
if(NULL!=root)
{
postOrder(root->lchild);//先后序遍历左子树
postOrder(root->rchild);//再后序遍历右子树
printf("%c ",root->data);//最后访问根节点
}
}
int main()
{
BTree *root;
createBTree(root);//创建二叉树
preOrder(root);//先序遍历
printf("\n");
inOrder(root);//中序遍历
printf("\n");
postOrder(root);//后序遍历
printf("\n");
return 0;
}
分享到:
相关推荐
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
本资料“数据结构 二叉树三种遍历的非递归算法(背诵版)”着重介绍了二叉树的三种主要遍历方法——前序遍历、中序遍历和后序遍历的非递归实现。 **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。非...
常见的二叉树遍历方法有三种:先序遍历、中序遍历和后序遍历。下面我们将讨论这三种遍历方法的非递归算法。 一、先序遍历非递归算法 先序遍历是指先访问根结点,然后访问左子树,最后访问右子树。非递归算法使用栈...
中序遍历是一种常见的二叉树遍历方式,其步骤为: 1. 遍历左子树; 2. 访问根节点; 3. 遍历右子树。 对于任何给定的二叉树节点来说,如果它有左右子节点,则按照“左-根-右”的顺序进行访问;如果没有子节点,则...
二叉树的遍历有多种方式,本文将详细介绍二叉树的三种常见遍历算法:先序遍历、 中序遍历和后序遍历。 1. 先序遍历非递归算法 先序遍历是一种常见的二叉树遍历算法。它的遍历顺序是:根节点 -> 左子树 -> 右子树。...
这是数据结构中二叉树的后序遍历的非递归算法的源代码。
前序遍历是二叉树遍历的一种方式,其顺序为“根节点 -> 左子树 -> 右子树”。具体而言,在遍历过程中,首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。对于非递归的前序遍历,通常会利用栈来辅助实现...
根据给定文件的信息,本文将详细介绍二叉树的前序、中序、后序以及层序遍历的递归算法,并结合代码实例进行说明。 ### 一、二叉树的基本概念 二叉树是一种非常重要的数据结构,在计算机科学中有着广泛的应用。一个...
二叉树的三种遍历,递归与非递归,按层。适合初学者。
二叉树的遍历是访问树中所有节点的过程,通常有三种遍历方式:前序遍历、中序遍历和后序遍历。 **后序遍历:** 后序遍历遵循“左-右-根”的顺序,即首先遍历左子树,然后遍历右子树,最后访问根节点。这种遍历方式...
二叉树的遍历有多种方式,本文将介绍二叉树的递归遍历,中序遍历,先序遍历和后序遍历。 递归遍历是指使用递归函数来遍历二叉树的每个结点。递归遍历的优点是代码简洁易懂,但缺点是可能会导致堆栈溢出。在本文的...
"数据结构二叉树三种遍历" 二叉树是一种基本的数据结构,它广泛应用于计算机...二叉树的三种遍历方式都是基于栈的实现,使用非递归算法来实现遍历过程。这些算法都是基于栈的实现,使用visite函数来访问结点的数据。
二叉树的创建与三种遍历的递归与非递归实现 包括二叉树的动态创建,前序遍历,中序遍历,后续遍历的递归与非递归方法的实现。
二叉树的递归遍历、非递归遍历和层次遍历
在本主题中,我们将深入探讨二叉树的三种主要遍历方法:中序遍历、前序遍历和后序遍历,以及如何通过递归和非递归的方式实现这些遍历。 首先,让我们理解递归遍历的概念。递归是一种解决问题的方法,它将问题分解为...
"二叉树的后序遍历非递归算法" 本文档主要介绍了二叉树的后序遍历非递归算法,该算法的实现可以有效地避免递归函数的使用,提高了算法的效率。该算法的实现主要基于栈的使用,将结点入栈和出栈来实现后序遍历。 ...
使用C++模板、类的技术实现了二叉树的中序遍历,在BC3.1已经测试成功
本资源“二叉树三种遍历动画演示”提供了对二叉树遍历方法的直观理解,通过动态的动画形式帮助学习者更好地掌握这些概念。 1. 前序遍历(Preorder Traversal): 前序遍历遵循“根-左-右”的访问顺序。首先访问根...
本文将详细介绍如何用C语言实现二叉树的中序遍历(非递归方式),并给出具体的代码示例。 #### 基本概念 - **二叉树**:每个节点最多有两个子节点的数据结构。 - **中序遍历**:遍历顺序为“左-根-右”,即先遍历...