二叉树的基本操作 【二叉树】



这个是在视频上学习的二叉树的操作,风格稍微类似c以前的版本。



#include<iostream>
#include<stdlib.h>
#define maxn 100
using namespace std;
#include<string>
#include<string.h>

typedef struct node
{
	char  data;
	node *lchild;
	node *rchild;
}*bitree,bitnode;

void creattree(bitree *t)  //中序创建二叉树
{
	char  ch;
	cin>>ch;
	if(ch=='#')  //如果输入的为‘#’则结束此子树
		*t=NULL;
	else
	{
		*t=new bitnode;
		
		(*t)->data=ch;
		creattree(&((*t)->lchild));//先对左子树进行递归
		creattree(&((*t)->rchild));//对右子树进行递归
	}  //将指针指向的左孩子的地址传给 bitree
}


bitree point(bitree t,char  e)
{
	bitree q[maxn]; //定义一个队列  用于存放二叉树终结点的指针
	int front=0,rear=0;  //初始化队列
	bitnode *p;  //遍历指针
	
	if(t)
	{
		q[rear]=t;
		rear++;
			
		while(front!=rear)  //如果队列非空
		{
			p=q[front];   //  取出头指针
			front++;// 方便下一次取出
			if(p->data==e)  //如果找到
				return p;
			if(p->lchild)  //如果p的左孩子节点存在 则入队列
			{
				q[rear]=p->lchild;
				rear++;
			}
			if(p->rchild)
			{
				q[rear]=p->rchild;
				rear++;
			}
		}  //不停的进行查找
	}
	return NULL;  //如果该指针为空 则返回无
}
		
int leftchild(bitree t,char  e)  //返回数据类型为data型的指针
{
	bitree p;
	if(t)
	{
		p=point(t,e);
		if(p&&p->lchild)
			return p->lchild->data;
	}
}

int rightchild(bitree t,int  e)
{
	bitree p;
	if(t)
	{
		p=point(t,e);
		if(p&&p->rchild)
			return p->rchild->data;
	}
}

/*
int deleteleftchild(bitree p)  //返回左删除成功的删除
{
	if(p)
	{
		destroybittree(&(p->lchild));
		return 1;
	}
	return 0;
}

int deleterightchild(bitree p)   //右删除的成功
{
	if(p)
	{
		destroybittree(&(p->rchild));
		return 1;
	}
	return 0;
}
*/
void destroytree(bitree *t)  //销毁二叉树操作
{
	if(*t)
	{
		if((*t)->lchild)
			destroytree(&((*t)->lchild));
		if((*t)->rchild)
			destroytree(&((*t)->rchild));
		free(*t);// 释放当前的
		*t=NULL;
	}
}
void preorder(bitree t)  //先序
{
	if(t)
	{
		cout<<t->data;
		preorder(t->lchild);
		preorder(t->rchild);
	}
}
void inorder(bitree t)  //中序
{
	if(t)
	{
		inorder(t->lchild);
		cout<<t->data;
		inorder(t->rchild);
	}
}

void postorder(bitree t)  //后序
{
	if(t)
	{
		postorder(t->lchild);
		postorder(t->rchild);
	}
}

int main()
{
	bitree p,root;
	creattree(&p);  //先序创建二叉树
	
	preorder(p);  //前序输出
	cout<<endl;
	inorder(p);  // 中序输出
	cout<<endl;
	postorder(p);  //后序输出
	cout<<endl;
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值