C/C++:二叉树的各种遍历(前序,中序,后序,层次)(一)

    所谓的二叉树是指树中所有节点的子节点个数都不超过2的树。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。

前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
若二叉树为空则结束返回,否则:
(1)访问根结点。
(2)前序遍历左子树。
(3)前序遍历右子树 。

需要注意的是:遍历左右子树时仍然采用前序遍历方法。

类似的:

前序遍历:根左右

中序遍历:左根

后序遍历:左右根

层次遍历:从上到下,从左到右


前序遍历

前序遍历:A B D E C F

中序遍历:D B E A C F

后序遍历:D E B F C A

层次遍历:A B C D E F 



1,创建节点

struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;//左右孩子
};

BiTNode*T;

2,先序递归创建二叉树表

	void CreateBiTree(BiTNode* &T){
		//按先序输入二叉树中结点的值(一个字符),空格字符代表空树,
		//构造二叉树表表示二叉树T。
		char ch;
		if ((ch = getchar()) == '#')T = NULL;//其中getchar()为逐个读入标准库函数
		else{
			T = new BiTNode;//产生新的子树
			T->data = ch;//由getchar()逐个读入来
			CreateBiTree(T->lchild);//递归创建左子树
			CreateBiTree(T->rchild);//递归创建右子树
			}
		}//CreateTree

        3,前中后序遍历

void PreOrderTraverse(BiTNode* &T){
	//先序递归遍历二叉树
	if (T){//当结点不为空的时候执行
		cout << T->data;
		PreOrderTraverse(T->lchild);//
		PreOrderTraverse(T->rchild);
	}
	else cout << "";
}//PreOrderTraverse
//================================================中序遍历二叉树
void Inorder(BiTNode* &T){//中序递归遍历二叉树
	if (T){//bt=null退层
		Inorder(T->lchild);//中序遍历左子树
		cout << T->data;//访问参数
		Inorder(T->rchild);//中序遍历右子树
	}
	else cout << "";
}//Inorder
//=================================================后序递归遍历二叉树  c 
void Posorder(BiTNode* &T){
	if (T){
		Posorder(T->lchild);//后序递归遍历左子树
		Posorder(T->rchild);//后序递归遍历右子树
		cout << T->data;//访问根结点
	}
	else cout << "";
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值