现在的位置: 首页 > 综合 > 正文

树和二叉树基本操作

2015年10月23日 ⁄ 综合 ⁄ 共 1596字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<string.h>
#include<algorithm>
#include<math.h>

using namespace std ;

typedef struct q//定义二叉树
{
	int data;
	struct q *left;
	struct q *right;
}binode;

void init(binode **t)//初始化
{
	*t = (binode *)malloc (sizeof (binode));
	(*t)->left = NULL;
	(*t)->right = NULL;
}

binode *insertleft ( binode *curr,int x )//左节点插入
{
	binode *t,*s;

	if (curr == NULL)
		return 0;
	t=curr->left;
	s=(binode *)malloc(sizeof(binode));
	s->data = x;
	s->left=NULL;
	s->right=NULL;

	curr->left=s;
	return curr->left;
}

void des(binode **curr)//撤销二叉树
{
	if ( (*curr)!=NULL && (*curr)->left != NULL )
		des(&(*curr)->left);
	if ( (*curr)!=NULL && (*curr)->right != NULL )
		des(&(*curr)->right);
	free(*curr);
}

binode *deleleft(binode *curr)//左子树删除
{
	if (curr == NULL || curr->left == NULL)
		return 0;
	des(&curr->left);
	curr->left=NULL;
	return curr;
}

void vis(char a)
{
	printf("%c  ",a);
}

void pinor(binode *curr,void vis(char a ))//前序遍历
{
	if (curr!=NULL)
	{
		vis(curr->data);
		pinor(curr->left,vis);
		pinor(curr->right,vis);
	}
}

void inor(binode *curr,void vis(char a ))//中序遍历
{
	if (curr!=NULL)
	{
		inor(curr->left,vis);
		vis(curr->data);
		inor(curr->right,vis);
	}
}

void poinor(binode *curr,void vis(char a ))//后序遍历
{
	if (curr!=NULL)
	{
		poinor(curr->left,vis);
		poinor(curr->right,vis);
		vis(curr->data);
	}
}

void print(binode *curr ,int n)//打印二叉树,n为缩进层数,初始为0;
{
	int  i;
	if (curr == NULL)
		return ;
	print(curr->right,n+1);

	for (i=0;i<n-1;i++)
		printf("   ");
	//访问根节点
	if (n>0)
	{
		printf("---");
		printf("%c\n",curr->data);
	}
	print(curr->right,n+1);
}

binode *search(binode *curr,int x)//查找操作
{
	if (curr == NULL)
		return 0;
	binode *find;
	if (curr!=NULL)
	{
		if (curr->data == x)
			find = curr;
	}
	else 
	{
		find = search(curr->left,x);
		if (find == NULL)
			find = search(curr->right,x);
	}
	return find;
}


int main()
{
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.