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

每日算法题【二叉树】:另一棵树的子树、二叉树的构建及遍历

(7)另一棵树的子树
  • 572. 另一棵树的子树 - 力扣(LeetCode)

  • 解题思路:

    前序遍历每个节点进行(两颗子树是否相等)的比较

    1. 如果两棵二叉树的根节点都为空则认为是其子树
    2. 如果二叉树根节点为空,但是子树不为空,则一定不是其子树
    3. 如果两个根节点都不为空则通过isSameTree函数进行比较双方是否相同
    4. 不相同就继续递下去进行比较,只要有一个相同,就说明是其子树
    /*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//两棵二叉树的根节点都为空则是相同的树if(p == NULL && q == NULL){//第一个递归结束条件return true;}//两棵二叉树的根节点有一个是空则证明为不相同的树if(p == NULL || q == NULL){//第二个递归结束条件return false;}//两棵二叉树的根节点都不为空且两个根节点不相同,则证明为不同的树if(p->val != q->val){//第三个递归结束条件return false;}return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
    }//前序遍历每个节点进行相同树函数比较
    bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {//如果两棵二叉树的根节点都为空则认为是其子树if(root == NULL && subRoot == NULL){return true;}//如果二叉树根节点为空,但是子树不为空,则一定不是其子树if(root == NULL){return false;}//如果两个根节点都不为空则通过函数进行比较双方是否相同if(isSameTree(root,subRoot)== true){return true;}//不相同就继续递下去进行比较,只要有一个相同,就说明是其子树return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
    }
    

(8)二叉树的构建及遍历
  • 二叉树遍历_牛客题霸_牛客网

  • 解题思路:

    其核心就是给定字符串然后用前序遍历数组来构建二叉树

    #include <stdio.h>
    #include <stdlib.h>//二叉树节点结构体
    typedef struct BTNode{char val;struct BTNode* left;struct BTNode* right;
    }BTNode;//前序遍历数组构建二叉树
    BTNode* CreateTree(char* a, int* index) {//遇到空节点结束递归if (a[*index] == '#') {(*index)++;return NULL;}//遇到非空节点申请空间并将值放入到二叉树中BTNode* root = (BTNode*)malloc(sizeof(BTNode));root->val = a[(*index)++];root->left = CreateTree(a, index);root->right = CreateTree(a, index);//左右子树都构建完毕之后返回根节点return root;
    }//中序遍历函数
    void inorder(struct BTNode* root){if(root == NULL){return;}inorder(root->left);printf("%c ",root->val);inorder(root->right);
    }int main() {//定义一个char*类型的数组来接收用户输入的字符串char a[100] = {0};int index = 0;scanf("%s", a);BTNode* ret = CreateTree(a,&index);if(ret == NULL){return 0;}inorder(ret);}
    
http://www.dtcms.com/a/357328.html

相关文章:

  • 赋能你的应用:英超实时数据接入终极指南(API vs. WebSocket)
  • OpenCV 图像轮廓检测与相关技术全解析
  • 阿瓦隆 A1346 107T 矿机深度评测:性能参数、能效及使用体验解析
  • 面试tips--java--equals() hashCode()
  • 莱特莱德:以“第四代极限分离技术”,赋能生物发酵产业升级
  • 自动驾驶中的传感器技术36——Lidar(11)
  • 可解释人工智能XAI
  • 手写MyBatis第40弹:手写MyBatis框架阶段性总结,你的ORM框架已达生产级雏形
  • 【nvidia-B200】生产报错common.h:14:10: fatal error: mpi.h: No such file or directory
  • (论文速读)RADIOv2.5:聚合式视觉基础模型
  • 美摄科技受邀参加2025中关村论坛年会,以超高清车载影像技术赋能智慧出行新体验!
  • 【报错】RuntimeError: HIP error: invalid device function
  • Python计算点云的均值、方差、标准差、凸点(顶点)、质心和去中心化
  • week5-[二维数组]对角线
  • idea2025.1.5安装+pj
  • 计算机视觉第一课opencv(四)保姆级教学
  • 构建稳定和可扩展云基础设施的首选服务:AWS的EC2实例
  • 【三维渲染技术讨论】Blender输出的三维文件里的透明贴图在Isaac Sim里会丢失, 是什么原因?
  • 2024年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • JVM_JMM
  • Java ThreadLocal为什么要用弱引用
  • Vue2 和 Vue3 里的防抖:简单说清楚怎么用
  • 【C语言入门级教学】sizeof和strlen的对⽐
  • 数据存储——数据库
  • 并发编程——07 深入理解AQS之独占锁ReentrantLock源码分析
  • 编程设计模式
  • 【系列02】端侧AI:构建与部署高效的本地化AI模型 第1章:为什么是端侧AI?
  • 【LINUX】常用基本指令(1)
  • go 使用rabbitMQ
  • 神经网络|(十六)概率论基础知识-伽马函数·中