您的位置:首页 > 理论基础 > 数据结构算法

数据结构——树(二叉树)

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的右子树
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: