数据结构-树-判断两个树是否相同
问题描述
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的
示例1
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例2
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
分析
最简单的策略是使用递归。首先判断 tree1 和 tree2 是不是 None
,然后判断它们的值是否相等。
若以上判断通过,则递归对子结点做同样操作。
核心代码
Status IsEqual(BiTree T, BiTree T1) {
/*
递归出口,核心操作
*只能if不能else否则递归调不到
*/
if (T== NULL && T1== NULL)
return TRUE;
if ((T == NULL && T1 != NULL)|| (T1 == NULL && T != NULL))
return FALSE;
if (T->data!=T1->data)
{
return FALSE;
}
/*递归函数,只要有一个status,返回的status*/
if (IsEqual(T->lchild, T1->lchild) == TRUE && IsEqual(T->rchild, T1->rchild) == TRUE) {
return TRUE;
}
else {
return FALSE;
}
}
可运行源代码(经VS2015、devC++编译运行通过)
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 /* 存储空间初始分配量 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
/* 用于构造二叉树********************************** */
int index = 1;
int index1 = 1;
typedef char String[100]; /* 0号单元存放串的长度 */
String str , str1;
/*分配字符串*/
Status StrAssign(String T, char *chars)
{
int i;
/*strlen计算字符串的长度*/
if (strlen(chars)>MAXSIZE)
return ERROR;
else
{
T[0] = strlen(chars);
for