思路:
结构相同就是左右子树结构都相同,不用考虑数据元素内容是否相同
三种情况:
(1)两棵树都空,返回真
(2)一棵空,一棵不空,假
(3)如果两棵树都非空,递归判断左右子树结构是否相同
代码:
bool isSameStructrue(BTNode *t,BTNode *p){
if(t==NULL&&p==NULL)//两棵树都空,结构相同,返回true
return true;
else if(t==NULL||p==NULL)//一棵树空,一棵树不空,结构不同,返回false
return false;
return isSameStructrue(t->lchild,p->lchild)&&isSameStructrue(t->rchild,p->rchild);
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
#define MAXSIZE 100
//用于使用c++的输出语句
#include<iostream>
using namespace std;
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void createBiTree(BTNode* &T);
bool isSameStructrue(BTNode *t,BTNode *p);
void main(){
BTNode *t;
createBiTree(t);
cout<<endl;
BTNode *p;
createBiTree(p);
cout<<endl;
cout<<isSameStructrue(t,p)

本文介绍如何设计一个算法来判断两棵二叉树的结构是否相同,主要考虑三种情况:两棵树都空、一棵空另一棵不空、两棵树非空时递归比较子树结构。此外,还提到了变种问题,即不仅要判断结构,还要考虑数据元素的相同。
最低0.47元/天 解锁文章
3060

被折叠的 条评论
为什么被折叠?



