类C语言--树习题:判别两棵树是否相等。

此代码可以运行,下附有运行区
[题目分析]先判断当前节点是否相等(需要处理为空、是否都为空、是否相等),如果当前节点不相等,直接返回两棵树不相等;如果当前节点相等,那么就递归的判断他们的左右孩子是否相等。

#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;

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

//先序创建二叉树
void CreateBiTree(BiTree &T)
{
   
    char ch; 
    scanf
  • 15
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是比较两棵树是否相等C语言程序: ```c #include <stdio.h> #include <stdlib.h> struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; int isSameTree(struct TreeNode* p, struct TreeNode* q) { if (p == NULL && q == NULL) return 1; if (p == NULL || q == NULL) return 0; if (p->val != q->val) return 0; return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); } int main() { // 构造两棵树 struct TreeNode* p = (struct TreeNode*)malloc(sizeof(struct TreeNode)); struct TreeNode* q = (struct TreeNode*)malloc(sizeof(struct TreeNode)); p->val = 1; q->val = 1; p->left = (struct TreeNode*)malloc(sizeof(struct TreeNode)); p->right = (struct TreeNode*)malloc(sizeof(struct TreeNode)); q->left = (struct TreeNode*)malloc(sizeof(struct TreeNode)); q->right = (struct TreeNode*)malloc(sizeof(struct TreeNode)); p->left->val = 2; p->right->val = 3; q->left->val = 2; q->right->val = 3; p->left->left = NULL; p->left->right = NULL; p->right->left = NULL; p->right->right = NULL; q->left->left = NULL; q->left->right = NULL; q->right->left = NULL; q->right->right = NULL; if (isSameTree(p, q)) printf("两棵树相等\n"); else printf("两棵树相等\n"); return 0; } ``` 这个程序中,我们定义了一个`TreeNode`结构体表示节点,其中包含了一个整数`val`表示节点的值,以及指向左右子节点的指针`left`和`right`。 `isSameTree`函数接受两棵树的根节点指针`p`和`q`,递归比较两棵树是否相等。如果两棵树都为空,则返回`1`;如果其中一棵为空,则返回`0`;如果两棵树的根节点的值不相等,则返回`0`;否则递归比较左右子是否相等。 在`main`函数中,我们构造了两棵树并调用`isSameTree`函数进行比较,输出比较结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值