数据结构 二叉树 c语言

头文件

#include<stdio.h>
#include<stdlib.h>

typedef struct tree_node{
	char data;
	struct tree_node *lchild;
	struct tree_node *rchild;
}Tree_Node; 

void CreateBTree(Tree_Node *&b, char *str)
{
	Tree_Node *St[100], *p;   //St数组作为顺序栈,保存双亲结点
	int top = -1, k, i= 0;		//top为栈顶指针
	char ch;
	b = NULL;		//初始时二叉链为空
	ch = str[i];
	while (ch != '\0')		//循环处理,直到str中的每个字符扫描完毕
	{
		switch (ch)
		{
		case '(':top++; St[top] = p; k = 1; break;		//开始处理左孩子结点
		case ')':top--;  break;							//栈顶结点的子树处理完毕
		case ',': k = 2; break;							//开始处理右孩子结点
		default:
			p = (Tree_Node *)malloc(sizeof(Tree_Node));		//创建一个结点由p指向它
			p->data = ch;								//存放结点值
			p->lchild = p->rchild = NULL;				//左右指针都设置为空
			if (b == NULL)					//尚未设置根结点
				b = p;						//p作为根结点
			else
			{
				switch (k)
				{
				case 1:St[top]->lchild = p; break;		//新建结点作为栈顶结点的左孩子
				case 2:St[top]->rchild = p; break;		//新建结点作为栈顶结点的右孩子
				}
			}
		}
		i++;
		ch = str[i];
	}
}


void ShowXianXu(Tree_Node *&T)			//		先序遍历二叉树
{
	if (T == NULL)  return;
	printf("%c ",T->data);
	ShowXianXu(T->lchild);			//	递归遍历左子树
	ShowXianXu(T->rchild);			//	递归遍历右子树
}
//	中序遍历
void ShowZhongXu(Tree_Node *&T)			//		先序遍历二叉树
{
	if (T == NULL)  return;
	ShowZhongXu(T->lchild);			//	递归遍历左子树
	printf("%c ",T->data);
	ShowZhongXu(T->rchild);			//	递归遍历右子树
}
//	后序遍历
void ShowHouXu(Tree_Node *&T)			//		后序遍历二叉树
{
	if (T == NULL)  return;
	ShowHouXu(T->lchild);			//	递归遍历左子树
	ShowHouXu(T->rchild);			//	递归遍历右子树
	printf("%c ",T->data);
}

主函数

#include"tree.h"

int main(){
	Tree_Node *t;
	char c[20] = "A(B(D(,G)),C(E,F))";
	CreateBTree(t,c);
	printf("先序遍历结果: \n");
	ShowXianXu(t);				//		先序遍历二叉树

	printf("\n中序遍历结果: \n");
	ShowZhongXu(t);				//		中序遍历二叉树
	
	printf("\n后序遍历结果: \n");
	ShowHouXu(t);

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值