数据结构——二叉树的建立以及递归和非递归遍历二叉树

#c实现二叉树的建立以及遍历

typedef struct BiTree {
	char data;
	struct Ltree* Lch, * Rch;
}LTree,* QLTree;
 QLTree create_tree(QLTree T) {    //遍历方法创建二叉树
	char c;
	scanf("请输入结点的数据:%c", &c);
	if (c == '#') {
		T = NULL;
	}
	else {
		(T) = (QLTree)malloc(sizeof(LTree));
		(T)->data = c;
		create_tree((T)->Lch);   //递归建立左子树
		create_tree((T)->Rch);  //递归建立右子树
	}
	return T;
}
void PreOrderTraverse(QLTree T) {   //先序方法递归方法遍历二叉树  
	if (T == NULL) {
		return T;
	}
	else {
		pritf("%c\n", T->data);     //打印根节点
		PreOrderTraverse(T->Lch);  //遍历左子树
		PreOrderTraverse(T->Rch);  //遍历右子树
	}
}
QLTree InOrderTraverse(QLTree T) {    //中序遍历递归遍历二叉树
	if (T == NULL) {
		return T;
	}
	else {
		InOrderTraverse(T->Lch);   //遍历左子树
		printf("%c,",T->data);    //打印根节点
		InOrderTrease(T->Rch);   //遍历右子树
	}
	return T;
}

QLTree PostOrderTravse(QLTree T) {  //后序遍历二叉树
	if (T == NULL) {
		printf("Tree is empty");
		return T;
	}
	else {
		PostOrderTravse(T->Lch);  //遍历左子树
		PostOrderTravse(T->Rch);  //遍历右子树
		printf("%c,", T->data);   //打印根节点的数据
	}
	return T;
}

//非递归遍历二叉树
QLTree InOrderTravse2(QLTree T){   //中序遍历
		Stack S = CreateStack(); //创建一个栈用于保存二叉树的节点;ps:栈方法  				      不在本篇中
		Push(S,T);  //将根节点入栈
		while(T!=NULL&&!Empty(T)){
			while(T!=NULL){       //直到左子树为空时停止
					Push(S,T);      //将节点入栈
					T = T->Lch;    //取左子树
					}
			if(!Empty(S)){     //栈不为空
					T=Pop(S);   //从栈中弹出一个元素
					printf("%c,",T->data);   //输出
					T=->T->Rch;   //去右子树
		}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值