初识二叉树

二叉树是树结构中最简单的,一颗树只有一个根结点,且所有结点的子结点不超过2个。

例如:

 遍历二叉树有3种遍历方式:

先序遍历(根左右)

中序遍历(左根右)

后序遍历(左右根)

这三种遍历,我是通过这篇博客了解的,十分形象,超级推荐http://t.csdn.cn/0tOlo

了解完以上内容之后,我就开始构建二叉树,通过链表的形式,每个结点需要有3个内容

 这个的结点表示的数据,还要能通过这个结点找到它的左孩子和右孩子。

根据二叉树的先序遍历,我们可以构建二叉树,我们可以先给根一个数据,然后通过这个根找到它的左子树,给左子树填充完数据之后,回到根,通过根找到右子树,填充右子树。这和递归函数的进出很像,因此我们在构建二叉树的时候,可以通过递归构建。

#include<bits/stdc++.h>
using namespace std;
struct node{
	char data;
	node *lchild;
	node *rchild;
};
node* creat()
{
	char data;
	node *t;
	scanf("%c",&data);
	if(data!='#')
	{
		t=(node*)malloc(sizeof(node));
		t->data=data;
//		printf("please input left child of %c:",data);
		t->lchild=creat();
//		printf("please input right child of %c:",data);
		t->rchild=creat();
		return t;
	}
	else
	{
		return NULL;
	}
}
void DLR(node *tree)//前序遍历
{
	if(tree==NULL)
	{
		return;
	}
	printf("%c",tree->data);
	DLR(tree->lchild);
	DLR(tree->rchild);
}

void LDR(node *tree)//中序遍历
{
	if(tree==NULL)
	{
		return;
	}
	LDR(tree->lchild);
	printf("%c",tree->data);
	LDR(tree->rchild);
}

void LRD(node *tree)
{
	if(tree==NULL)
	{
		return;
	}
	LRD(tree->lchild);
	LRD(tree->rchild);
	printf("%c",tree->data);
	
}
void free(node *tree)
{
	if(tree==NULL)
	{
		return;
	}
	free(tree->lchild);
	free(tree->rchild);
	tree=NULL;	
}
int main()
{
	node *tree;
	tree=creat();
	DLR(tree);
	printf("\n");
	LDR(tree);
	printf("\n");
	LRD(tree);
	printf("\n");
	free(tree);
	return 0;
}
//CBA##DE##F##GH###

 运行结果

输出完之后,记得通过free函数来释放内存。

我们释放内存要自下往上,也就是后序遍历,不然找到北。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值