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

【数据结构】二叉树练习

1.单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

bool isUnivalTree(struct TreeNode* root) {if(root==NULL)return true;if(root->left&&root->left->val!=root->val)return false;if(root->right&&root->right->val!=root->val)return false;return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

2.相同的树

100. 相同的树 - 力扣(LeetCode)

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;else{int lret=isSameTree(p->left,q->left);int rret=isSameTree(p->right,q->right);return lret&&rret;}
}

3.对称二叉树

101. 对称二叉树 - 力扣(LeetCode)

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->right,q->left)&&isSameTree(p->left,q->right);
} bool isSymmetric(struct TreeNode* root) {return isSameTree(root->left,root->right);
}

4.前序遍历(返回数组) 

144. 二叉树的前序遍历 - 力扣(LeetCode)

int TreeSize(struct TreeNode* root)
{return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}void preorder(struct TreeNode* root,int*a,int*pi)
{if(root==NULL)return;a[(*pi)++]=root->val;preorder(root->left,a,pi);preorder(root->right,a,pi);}int* preorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize=TreeSize(root);int*a=(int*)malloc(sizeof(int)*TreeSize(root));int i=0;preorder(root,a,&i);return a;
}

5.中序遍历(返回数组) 

94. 二叉树的中序遍历 - 力扣(LeetCode)

int TreeSize(struct TreeNode* root){return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;}void Inorder(struct TreeNode* root, int*a,int*pi){if(root==NULL)return;Inorder(root->left, a, pi);a[(*pi)++] = root->val;Inorder(root->right, a, pi);}int* inorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize=TreeSize(root);int*a=(int*)malloc(sizeof(int)*TreeSize(root));int i=0;Inorder(root,a,&i);return a;
}

 6.后序遍历(返回数组)

145. 二叉树的后序遍历 - 力扣(LeetCode)

int TreeSize(struct TreeNode* root){return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;}void postorder(struct TreeNode* root, int*a,int*pi){if(root==NULL)return;postorder(root->left, a, pi);postorder(root->right, a, pi);a[(*pi)++] = root->val;}int* postorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize=TreeSize(root);int*a=(int*)malloc(sizeof(int)*TreeSize(root));int i=0;postorder(root,a,&i);return a;
}

7.另一颗树的子树 

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

 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->right,q->right)&&isSameTree(p->left,q->left);
} bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) 
{if(root==NULL)return false;if(isSameTree(root,subRoot))return true;return isSubtree(root->right,subRoot)||isSubtree(root->left,subRoot);
}

8.二叉树遍历

#include <stdio.h>
#include<stdlib.h>struct TreeNode
{struct TreeNode*right;struct TreeNode*left;char val;
};struct TreeNode*CreatTree(char*a,int*pi)
{if(a[*pi]=='#'){(*pi)++;return NULL;}struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));root->val=a[*pi];(*pi)++;root->left=CreatTree(a,pi);root->right=CreatTree(a,pi);return root;}void Inorder(struct TreeNode* root)
{if(root==NULL)return;Inorder(root->left);printf("%c ",root->val);Inorder(root->right);
}int main() 
{char a[100];scanf("%s",a);int i=0;struct TreeNode* root=CreatTree(a,&i);Inorder(root);return 0;
}

http://www.xdnf.cn/news/17168.html

相关文章:

  • 从BaseMapper到LambdaWrapper:MyBatis-Plus的封神之路
  • 【Unity3D实例-功能-镜头】第三人称视觉-镜头优化
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • Oracle exp imp expdp impdp 命令详解
  • 如何快速开发符合Matter标准的智能家居设备?
  • 一个程序通过 HTTP 协议调用天气 API,解析 JSON 格式的天气数据,提取关键信息并格式化输出:日期、天气状况、温度范围、风向、湿度等核心气象数据。
  • 锡膏种类多,不同的锡膏有什么区别,该如何正确选择?
  • JAVA第六学:数组的使用
  • k8s中pod如何调度?
  • 读取了错误数据导致STM32 单片机Hard Fault
  • [特殊字符] 2025年生成式大模型部署与推理优化全景解析
  • WebSocket 在多线程环境下处理 Session并发
  • 《Day3-PyTorch 自动微分入门:从计算图到梯度下降的实践指南》
  • Tiger任务管理系统-10
  • 基于Spring Cloud Stream与Kafka的事件驱动微服务架构设计与实战指南
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • 【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理
  • 关于vue2中对接海康摄像头以及直播流rtsp或rtmp,后台ffmpeg转码后通过ws实现
  • 企业家 IP 发展态势剖析|创客匠人
  • Kong vs. NGINX:从反向代理到云原生网关的全景对比
  • Linux第一阶段练习
  • 一篇文章入门TCP与UDP(保姆级别)
  • 栅栏密码的加密解密原理
  • 动手学深度学习13.11. 全卷积网络 -笔记练习(PyTorch)
  • Modbus转Profinet网关与西门子PLC的互联配置案例:用于永宏品牌变频器的控制实现
  • 数据标注之数据集的类型与如何标注
  • 【数据结构——并查集】
  • Renesas Electronics RZ/V2N 评估套件
  • Renesas Electronics RA8M1语音套件(VK-RA8M1)
  • Linux系统之Dockerfile模块