树的遍历—先序遍历、中序遍历、后序遍历

名词解释
(1)每个元素称为节点
(2)有一个特定的节点被称为根节点或树根
(3)除根节点外的其余数据元素被分为m个互不相交的集合T1,T2,T3.....Tm-1,其中每一个集合Ti本身也是一个树,被称作原树的子树
节点的度:一个节点含有子树的个数称为该节点的度
叶节点或终端节点 :度为0的节点称为叶节点
非终端节点或分支节点:度不为0的节点
双亲结点或父节点:若一个节点含有子节点,则这个节点称为其子节点的一个父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点
兄弟节点:具有相同父节点的节点互称为兄弟节点
树的度:一棵树中,最大的节点的度称为树的度
节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,以此类推
树的高度或深度:树中节点的最大层次
森林:由m颗互不相交的树的集合称为森林

二叉树: 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。
二叉树的链式存储结构: 名词解释
(1)每个元素称为节点
(2)有一个特定的节点被称为根节点或树根
(3)除根节点外的其余数据元素被分为m个互不相交的集合T1,T2,T3.....Tm-1,其中每一个集合Ti本身也是一个树,被称作原树的子树
节点的度:一个节点含有子树的个数称为该节点的度
叶节点或终端节点 :度为0的节点称为叶节点
非终端节点或分支节点:度不为0的节点
双亲结点或父节点:若一个节点含有子节点,则这个节点称为其子节点的一个父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点
兄弟节点:具有相同父节点的节点互称为兄弟节点
树的度:一棵树中,最大的节点的度称为树的度
节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,以此类推
树的高度或深度:树中节点的最大层次
森林:由m颗互不相交的树的集合称为森林

二叉树: 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。

二叉树的链式存储结构:

typedef struct BiTNode{
	int data;
	struct BitNode *rchild, *lchild;
}BiTNode, *BiTree; 

二叉树的先序建立(递归):

void CreateBiTree(BiTree &T){
	char data;
	scanf("%c", &data);
	if(data == '#'){
		T == NULL;
	}
	else{
		T = (BiTree)malloc(sizeof(BiTNode));
		T -> data = data;
		CreateBiTree(T -> lchild);
		CreateBiTree(T -> rchild);
	}

输出:

void Visit(BiTree &T){
	if(T -> data != '#'){
		printf("%c", T -> data);
	}
} 

先序遍历:
首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,
然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
例如,下图所示二叉树的遍历结果是:ABDECF



void PreOrder(BiTree &T){
	if(T != NULL){
		Visit(T);
		PreOrder(T -> lchild);
		PreOrder(T -> rchild);
	} 
}

中序遍历:
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
如右图所示 二叉树 中序遍历结果:DBEAFC


void InOrder(BiTree &T){
	if(T != NULL){
		InOrder(T -> rchild);
		Visit(T);
		InOrder(T -> lchild);
	}
}

后序遍历:

后序遍历先遍历左子树,然后遍历右子树,最后访问根节点,在遍历左子树、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根节点
如右图所示 二叉树 中序遍历结果:DEBFCA


void PostOrder(BiTree T){
	if(T != NULL){
		PostOrder(T -> lchild);
		PostOrder(T -> rchild);
		Visit(T);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值