判断两个二叉树是否结构相同



/******************判断两棵二叉树是否结构相同**********************/
bool equalBiTree(BiTreeNode* &T1,BiTreeNode* &T)
{ 

	if(T1 == NULL && T == NULL )return true;//都为空则相同
	else if(T1 == NULL || T == NULL )//一个为空一个不空,则不同
		return false;
	bool resultLeft = equalBiTree(T1->lchild,T->lchild);//比较左子树
	bool resultRight = equalBiTree(T1->rchild,T->rchild);//比较右子树
	return (resultLeft && resultRight); 


}


判断两棵二叉树是否结构相同,可以通过递归的方式进行判断。 首先,判断两棵树的根节点是否相同,如果不同则这两棵树的结构肯定不同;如果相同,则递归判断它们的左子树和右子树是否相同。 以下是C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> // 二叉树结点定义 typedef struct node { int val; struct node *left; struct node *right; } TreeNode; // 判断两棵二叉树是否结构相同 bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) { return true; } else if (p == NULL || q == NULL) { return false; } else if (p->val != q->val) { return false; } else { return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } } // 主函数 int main() { // 构造两棵二叉树 TreeNode *p1 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *p2 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q1 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q2 = (TreeNode *)malloc(sizeof(TreeNode)); TreeNode *q3 = (TreeNode *)malloc(sizeof(TreeNode)); p1->val = 1; p1->left = p2; p1->right = NULL; p2->val = 2; p2->left = NULL; p2->right = NULL; q1->val = 1; q1->left = q2; q1->right = q3; q2->val = 2; q2->left = NULL; q2->right = NULL; q3->val = 3; q3->left = NULL; q3->right = NULL; // 判断两棵二叉树是否结构相同 bool same = isSameTree(p1, q1); if (same) { printf("p1 and q1 have the same structure.\n"); } else { printf("p1 and q1 do not have the same structure.\n"); } // 释放内存 free(p1); free(p2); free(q1); free(q2); free(q3); return 0; } ``` 以上代码中,我们定义了一个 TreeNode 结构体表示二叉树的结点,其中包含了结点的值、左子树和右子树。isSameTree 函数用于判断两棵二叉树是否结构相同,如果相同则返回 true,否则返回 false。在主函数中,我们构造了两棵二叉树,然后调用 isSameTree 函数进行判断。最后,我们释放了动态分配的内存,避免内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值