数据结构——树(二叉树)
2010-12-22 20:21
288 查看
树结构的特点:
1他是一种层次关系的结构,每一层的元素可能与下一层的多个数据元素(孩子)相关,但只和上一层中的一个数据元素相关;
2每一个元素(除了整棵树的根节点之外)都可以递归地看做根节点,以及上一层节点的左孩子或者右孩子。树的遍历依据的就是这一思路;
二叉树的创建与操作:
定义二叉树的节点:
typedef struct node
{
char data; //二叉树的数据,可以是任何类型
struct node *lchild,*rchild; //指向该节点左孩子与右孩子的指针
}tree;
二叉树的遍历:
思想:递归地访问每一层的根节点,这就遍历了树的各个节点;
1先序遍历:
方法:1访问该层的根节点;
2递归地访问该层的左孩子;
3递归地访问该层的右孩子;
PreOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
PreOrderTraverse(T->lchild );//先序遍历T的左子树
PreOrderTraverse(T->rchild);//先序遍历T的右子树
}
}
2中序遍历
方法: 1递归地访问该层的左孩子;
2访问该层的根节点;
3递归地访问该层的右孩子;
InOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
InOrderTraverse(T->lchild );//中序遍历T的左子树
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
InOrderTraverse(T->rchild);//中序遍历T的右子树
}
}
3后序遍历
方法: 1递归地访问该层的左孩子;
2递归地访问该层的右孩子;
3访问该层的根节点;
PosOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
PosOrderTraverse(T->lchild );//中序遍历T的左子树
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
PosOrderTraverse(T->rchild);//中序遍历T的右子树
1他是一种层次关系的结构,每一层的元素可能与下一层的多个数据元素(孩子)相关,但只和上一层中的一个数据元素相关;
2每一个元素(除了整棵树的根节点之外)都可以递归地看做根节点,以及上一层节点的左孩子或者右孩子。树的遍历依据的就是这一思路;
二叉树的创建与操作:
定义二叉树的节点:
typedef struct node
{
char data; //二叉树的数据,可以是任何类型
struct node *lchild,*rchild; //指向该节点左孩子与右孩子的指针
}tree;
二叉树的遍历:
思想:递归地访问每一层的根节点,这就遍历了树的各个节点;
1先序遍历:
方法:1访问该层的根节点;
2递归地访问该层的左孩子;
3递归地访问该层的右孩子;
PreOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
PreOrderTraverse(T->lchild );//先序遍历T的左子树
PreOrderTraverse(T->rchild);//先序遍历T的右子树
}
}
2中序遍历
方法: 1递归地访问该层的左孩子;
2访问该层的根节点;
3递归地访问该层的右孩子;
InOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
InOrderTraverse(T->lchild );//中序遍历T的左子树
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
InOrderTraverse(T->rchild);//中序遍历T的右子树
}
}
3后序遍历
方法: 1递归地访问该层的左孩子;
2递归地访问该层的右孩子;
3访问该层的根节点;
PosOrderTraverse(tree *T)
{
if(T) //递归的结束条件:孩子节点为空,即T为空指针
{
PosOrderTraverse(T->lchild );//中序遍历T的左子树
visit(T->data); //递归地访问每一层的根节点,visit函数体里写的是对每个节点要做的事
PosOrderTraverse(T->rchild);//中序遍历T的右子树
相关文章推荐
- SDUT-2804 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- 【2136】数据结构实验之二叉树的建立与遍历 SDUTOJ
- 数据结构与算法-二叉树
- 数据结构之树和二叉树
- 二叉树操作--数据结构
- 数据结构——二叉树(递归与非递归遍历)
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- 数据结构基础加强之二叉树
- 数据结构——使用非递归方法后序遍历二叉树
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- 数据结构—树与二叉树篇III
- 数据结构——二叉树
- 寒假训练--树与二叉树--数据结构实验之求二叉树后序遍历和层次遍历
- [数据结构基础] 二叉树
- 数据结构实验之二叉树的建立与遍历
- 数据结构之二叉树
- 数据结构之二叉树的遍历汇总
- 3340 数据结构实验之二叉树一:树的同构
- 数据结构——二叉树的操作