当前位置: 首页 > article >正文

数据结构判断两棵树是否相等

算法思想

判断两棵二叉树是否相等,主要有以下几个步骤:

  1. 递归比较:如果两棵树的根节点的数据相等,则继续递归地比较左右子树。
  2. 递归终止条件
    • 如果两棵树都为空,则认为它们相等。
    • 如果一棵树为空,另一棵树不为空,则认为它们不相等。
    • 如果根节点的数据不同,则认为它们不相等。
  3. 递归推进:如果根节点数据相同,继续比较左子树和右子树

程序设计

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

// 定义二叉树节点结构体
typedef int TElemType;  // 假设数据类型为int,可根据需要修改
typedef struct BiTNode {
    TElemType data;
    struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;

// 判断两棵二叉树是否相等的递归函数
int areTreesEqual(BiTree tree1, BiTree tree2) {
    // 如果两棵树都为空,认为相等
    if (tree1 == NULL && tree2 == NULL) {
        return 1;
    }

    // 如果一棵树为空,另一棵树不为空,则不相等
    if (tree1 == NULL || tree2 == NULL) {
        return 0;
    }

    // 如果根节点的数据不相等,则不相等
    if (tree1->data != tree2->data) {
        return 0;
    }

    // 递归判断左子树和右子树是否相等
    return areTreesEqual(tree1->lchild, tree2->lchild) && areTreesEqual(tree1->rchild, tree2->rchild);
}

// 创建一个新节点的函数
BiTree createNode(TElemType data) {
    BiTree newNode = (BiTree)malloc(sizeof(BiTNode));
    if (newNode) {
        newNode->data = data;
        newNode->lchild = newNode->rchild = NULL;
    }
    return newNode;
}

// 主函数测试
int main() {
    // 创建两棵相同的树
    BiTree tree1 = createNode(1);
    tree1->lchild = createNode(2);
    tree1->rchild = createNode(3);

    BiTree tree2 = createNode(1);
    tree2->lchild = createNode(2);
    tree2->rchild = createNode(3);

    // 判断两棵树是否相等
    if (areTreesEqual(tree1, tree2)) {
        printf("The trees are equal.\n");
    }
    else {
        printf("The trees are not equal.\n");
    }

    return 0;
}


http://www.kler.cn/a/420656.html

相关文章:

  • Zustand的学习和应用
  • Spark和MapReduce场景应用和区别
  • PLC协议
  • 数据结构__01
  • Delphi 12.2.1 idhttpserver的使用方法
  • 营业执照 OCR 识别 API 的发展前景
  • 九,[极客大挑战 2019]LoveSQL1
  • JavaWeb—— 构建互联网世界的 “魔法砖石” 与实战密码
  • 企业品牌曝光的新策略:短视频矩阵系统
  • 多模态抑郁估计论文研读|Multi-modal Depression Estimation Based on Sub-attentional Fusion
  • 【QNX+Android虚拟化方案】123 - 如何配置qnx侧GPIO_IRQ中断和PMIC_GPIO_IRQ中断
  • 【Android】View工作原理
  • Linux 内核系统架构
  • Kafka-Consumer源码分析
  • USB 声卡全解析:提升音频体验的得力助手
  • 网络安全之常用安全设备功能及作用_设备管理器安全设备是什么
  • Runway 技术浅析(六):文本到视频(Text-to-Video)
  • GPT时代的BI革命:智能报表系统如何颠覆传统决策
  • qt音频实战
  • Vue 实现无线滚动效果
  • Linux下anaconda安装环境
  • Docker和Docker Compose部署方式的区别以及各自适用的场景(ChatGPT-4o回答)
  • WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
  • 将一个数组逆序输出。-多语言
  • 【SQL】实战--组合两个表
  • 一、文本预处理