树的创建与遍历

#include<iostream>
#include<cstdio>
#include<malloc.h>
using namespace std;
//树节点 
typedef struct node
{
	int data;
	struct node*left;
	struct node*right;
}Node;
//树根 
typedef  struct
{
	Node*root;
}Tree;

void insert_tree(Tree* tree,int value)
{
	//申请空间并且初始化元素 
	Node *node=(Node*)malloc(sizeof(Node));
	node->data=value;
	node->left=NULL;
	node->right=NULL;
	//插入节点
	if(tree->root==NULL)
	{
		//此时是空的树,该节点充电根节点
		tree->root=node; 
	 } 
	else
	{
		Node*temp=tree->root;
		while(temp!=NULL)
		{
			//左小右大 
			if(temp->data>value)
			{
				//进入左边之后看指针是否有
				if(temp->left==NULL)
				{
					temp->left=node;
					return;//如果此时是空的,直接赋给它 
				 } 
				 else
				 {
				 	//如果不为空,继续继续向下搜索
					 temp=temp->left; 
				  } 
			} 
			//如果是temp->data<value 右子树 其余情况与左子树相同 
			else
			{
				if(temp->right==NULL)
				{
					temp->right=node;
					return;
				 } 
				 else
				 {
				 	//继续向下搜索
					temp=temp->right; 
				 }
			}
		}
	}
	return;
 } 
 //利用中序遍历打印树 
void inorder(Node *node)
{
	if(node!=NULL)
	{
		//递归打印
		//左中右
		inorder(node->left);
		cout<<node->data<<" ";
		inorder(node->right); 
	 } 
}
//利用先序遍历打印树
//根左右
void preorder(Node*node)
{
	if(node!=NULL)
	{
		cout<<node->data<<" ";//根
		preorder(node->left);
		preorder(node->right);		
	 } 
 } 
//利用后序遍历打印树
//左右根
void postorder(Node*node)
{
	if(node!=NULL)
	{
		postorder(node->left);
		postorder(node->right);
		cout<<node->data<<" ";
	} 
 } 
int main()
{
	Tree tree;
	tree.root=NULL;//创建一个空树
	cout<<"请输入树中结点的个数:";
	int n;
	cin>>n;
	while(n--)
	{
		int temp;
		cout<<"请输入结点的值:";
		cin>>temp;
		insert_tree(&tree,temp); 
	 } 
	cout<<"二叉树中序遍历的结果为:"; 
	inorder(tree.root);
	cout<<endl;
	cout<<"二叉树先序遍历的结果为:"; 
	preorder(tree.root);
	cout<<endl;
	cout<<"二叉树后序遍历的结果为:"; 
	postorder(tree.root);
	cout<<endl;
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔济沧海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值