C语言实现二叉树各种基本运算的算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17497931/article/details/84024820

 包含如下函数:

CreateBTree( BTNode * &b, char * str ) : 由 括号表 示 串 str 创 建二叉链b ;

FindNode( BTNode * &b,  ElemType x ) : 返回data域 为 x的节点 指 针 ;

LchildNode( BTNode * &p ) : 返回p节点的左孩子节点 指 针 ;

RchildNode( BTNode * &p ) : 返回p节点的右孩子节点 指 针 ;

BTHeight( BTNode * &b ) : 返回二叉 树 b的高度 ;

DispBTree( BTNode * &b ) : 以括号表 示 法输出二叉 树 b ;

DestroyBTree( BTNode * &b ) : 释 放 二叉 树 b的所 节点 。

#include "stdio.h"
#include "malloc.h"
#define MaxSize 100
typedef char ElemType;
typedef struct node {
	ElemType	data;
	struct node	* lchild;
	struct node	* rchild;
} BTNode;

void CreateBTree( BTNode * &b, char * str )
{
	BTNode	* St[MaxSize], *p;
	int	top = -1, k, j = 0;
	char	ch;
	b	= NULL;
	ch	= str[j];
	while ( ch != '\0' )
	{
		switch ( ch )
		{
		case '(': top++; St[top] = p; k = 1; break;
		case ')': top--; break;
		case ',': k		= 2; break;
		default: p		= (BTNode * ) malloc( sizeof(BTNode) );
			p->data		= ch;
			p->lchild	= p->rchild = NULL;
			if ( b == NULL )
				b = p;
			else{
				switch ( k )
				{
				case 1: St[top]->lchild = p; break;
				case 2: St[top]->rchild = p; break;
				}
			}
		}
		j++;
		ch = str[j];
	}
}


void DestroyBTree( BTNode * &b )
{
	if ( b != NULL )
	{
		DestroyBTree( b->lchild );
		DestroyBTree( b->rchild );
		free( b );
	}
}


BTNode * FindNode( BTNode *b, ElemType x )
{
	BTNode *p;
	if ( b == NULL )
		return(b);
	else{
		p = FindNode( b->lchild, x );
		if ( p != NULL )
			return(p);
		else
			return(FindNode( b->rchild, x ) );
	}
}


BTNode * LchildNode( BTNode * p )
{
	return(p->lchild);
}


BTNode * RchildNode( BTNode * p )
{
	return(p->rchild);
}


int BTHeight( BTNode * b )
{
	int lchildh, rchildh;
	if ( b == NULL )
		return(0);
	else{
		lchildh = BTHeight( b->lchild );
		rchildh = BTHeight( b->rchild );
		return( (lchildh > rchildh) ? (lchildh + 1) : (rchildh + 1) );
	}
}


void DispBTree( BTNode * b )
{
	if ( b != NULL )
	{
		printf( "%c", b->data );
		if ( b->lchild != NULL || b->rchild != NULL )
		{
			printf( "(" );
			DispBTree( b->lchild );
			if ( b->rchild != NULL )
				printf( "," );
			DispBTree( b->rchild );
			printf( ")" );
		}
	}
}

二叉树相关内容:

  1. C语言实现由遍历序列构造二叉树

猜你喜欢

转载自blog.csdn.net/qq_17497931/article/details/84024820