C 还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:

输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:

输出为一个整数,即该二叉树的高度。
输入样例:

9
ABDFGHIEC
FDHGIBEAC

输出样例:

5

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
	char data;
	struct node* lchild;
	struct node* rchild;
}BTNode, * BiTree;

void ReBiTree(char preod[], char inod[], int n, BiTree* bt)
{
	if (n <= 0)
	{
		(*bt) = NULL;
		return;
	}
	else
	{
		PreInOd(preod, 0, n-1, inod, 0, n-1, bt);
	}
}
void PreInOd(char preod[], int i, int j, char inod[], int k, int h, BiTree* bt)
{
	(*bt) = (BTNode*)malloc(sizeof(BTNode));
	(*bt)->data = preod[i];
	int m = k;
	while (inod[m] != preod[i])
	{
		m++;
	}
	if (m == k)
	{
		(*bt)->lchild = NULL;
	}
	else
	{
		PreInOd(preod, i + 1, i + m - k, inod, k, m - 1, &((*bt)->lchild));
	}
	if (m == h)
	{
		(*bt)->rchild = NULL;
	}
	else
	{
		PreInOd(preod, i + m - k + 1, j, inod, m + 1, h, &((*bt)->rchild));
	}
}
int GetHeight(BiTree bt)
{
	int left = 0, right = 0;
	if (bt == NULL)
	{
		return 0;
	}
	else
	{
		left = GetHeight(bt->lchild);
		right = GetHeight(bt->rchild);
		if (left > right)
		{
			return (left + 1);
		}
		else
		{
			return (right + 1);
		}
	}
}
int main()
{
	int n;
	char preod[51], inod[51];
	printf("Please input n\n");
	scanf("%d", &n);
	printf("Please input the preod\n");
	scanf(" %s", preod);
	printf("Please input the inod\n");
	scanf("%s", inod);
	BiTree bt;
	ReBiTree(preod, inod, n, &bt);
	printf("%d", GetHeight(bt));

	return 0;
}

发布了11 篇原创文章 · 获赞 2 · 访问量 618

猜你喜欢

转载自blog.csdn.net/Cheng_XZ/article/details/103227892
今日推荐