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

关于二叉树的OJ练习

关于二叉树的OJ练习

本文章将展示zach在学习二叉树时所做的OJ练习

  1. 单值二叉树
typedef struct TreeNode tree_node;
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);
}
  1. 相同的树
typedef struct TreeNode tree_node;
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);
}
  1. 对称二叉树
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->right) && isSameTree(p->right, q->left);
}bool isSymmetric(struct TreeNode* root) {return isSameTree(root->left, root->right);
}
  1. 另一颗树的子树
typedef struct TreeNode tree_node;
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)return false;if (isSameTree(root, subRoot))return true;return isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
}
  1. 二叉树的前序遍历
typedef struct TreeNode tree_node;int tree_size(tree_node* root)
{if (root == NULL)return 0;return 1 + tree_size(root->left) + tree_size(root->right);
}
void _preorderTraversal(tree_node* root, int* arr, int* pi)
{if (root == NULL)return;arr[(*pi)++] = root->val;_preorderTraversal(root->left, arr, pi);_preorderTraversal(root->right, arr, pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize =  tree_size(root);int* arr = (int*)malloc(sizeof(int) * (*returnSize));int i = 0;_preorderTraversal(root, arr, &i);return arr;
}
  1. 二叉树的中序遍历
typedef struct TreeNode tree_node;
int tree_size(tree_node* root) {if (root == NULL)return 0;return 1 + tree_size(root->left) + tree_size(root->right);
}void _inorderTraversal(tree_node* root, int* arr, int* pi) {if (root == NULL)return;if (root->left != NULL) {_inorderTraversal(root->left, arr, pi);}arr[(*pi)++] = root->val;_inorderTraversal(root->right, arr, pi);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize = tree_size(root);int* arr = (int*)malloc(sizeof(int) * (*returnSize));int i = 0;_inorderTraversal(root, arr, &i);return arr;
}
  1. 二叉树的后序遍历
typedef struct TreeNode tree_node;int tree_size(tree_node* root) {if (root == NULL)return 0;return 1 + tree_size(root->left) + tree_size(root->right);
}
void _postorderTraversal(tree_node* root, int* arr, int* pi) {if (root == NULL)return;if (root->left != NULL)_postorderTraversal(root->left, arr, pi);_postorderTraversal(root->right, arr, pi);arr[(*pi)++] = root->val;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize = tree_size(root);int* arr = (int*)malloc(*returnSize * sizeof(int));int i = 0;_postorderTraversal(root, arr, &i);return arr;
}
  1. 二叉树的遍历
#include <stdio.h>
#include <stdlib.h>typedef struct binary_tree_node {char data;struct binary_tree_node* left;struct binary_tree_node* right;
} btnode;// 根据数组创建二叉树
btnode* buy_node(char x) {btnode* new_node = (btnode*)malloc(sizeof(btnode));new_node->data = x;new_node->left = new_node->right = NULL;return new_node;
}
btnode* creat_tree(char* arr, int* pi) {if (arr[*pi] == '#') {(*pi)++;return NULL;}btnode* root = buy_node(arr[(*pi)++]);root->left = creat_tree(arr, pi);root->right = creat_tree(arr, pi);return root;
}void inorder(btnode* root) {if (root == NULL)return;inorder(root->left);printf("%c ", root->data);inorder(root->right);
}int main() {char arr[100];scanf("%s", arr);int i = 0;btnode* root = creat_tree(arr, &i);inorder(root);return 0;
}


文章转载自:

http://iSN8mFqP.dgfpp.cn
http://CPLrw8Xj.dgfpp.cn
http://UiI8B2vZ.dgfpp.cn
http://k4gpQ8Qj.dgfpp.cn
http://mcDymM7K.dgfpp.cn
http://t9CUU2cV.dgfpp.cn
http://xoSkm60X.dgfpp.cn
http://HEYnBont.dgfpp.cn
http://8IKpJ58x.dgfpp.cn
http://UkRGQINJ.dgfpp.cn
http://WVgcHiTL.dgfpp.cn
http://7gsjS2jz.dgfpp.cn
http://a9mVaS2v.dgfpp.cn
http://gh72EpFe.dgfpp.cn
http://NJ7RBrmo.dgfpp.cn
http://JSExGeRv.dgfpp.cn
http://P7ce3kUy.dgfpp.cn
http://fd7loD5s.dgfpp.cn
http://Fv74crLj.dgfpp.cn
http://gqORyP2M.dgfpp.cn
http://YVCk6sax.dgfpp.cn
http://xXWcpmEz.dgfpp.cn
http://k1a4HyEy.dgfpp.cn
http://Q53yEMVv.dgfpp.cn
http://BJyTqhj9.dgfpp.cn
http://s5bIkiaY.dgfpp.cn
http://qMZcosPt.dgfpp.cn
http://9Rc4PlNc.dgfpp.cn
http://lniaPvvA.dgfpp.cn
http://eB5zZCTF.dgfpp.cn
http://www.dtcms.com/a/388545.html

相关文章:

  • STM32H743-ARM例程1-GPIO点亮LED
  • 25.9.16幂等性总结
  • 27、Transformer架构详解-序列建模的革命性突破
  • [从青铜到王者] Spring Boot+Redis+Kafka电商场景面试全解析
  • 基于el-upload和vue-cropper实现图片上传裁剪组件
  • Kettle时间戳转换为日期格式处理方式
  • go.js Panel中文API
  • 加密货币中的MEV是什么
  • 【Linux学习笔记】线程概念与控制(一)
  • Linux笔记---非阻塞IO与多路复用
  • 生物信息学中的 AI Agent: Codex 初探
  • 贪心算法应用:埃及分数问题详解
  • 力扣hot100刷题day1
  • 什么是跨站脚本攻击
  • 团队对 DevOps 理解不统一会带来哪些问题
  • I²C 总线通信原理与时序
  • C#关键字record介绍
  • 试验台铁地板的设计与应用
  • 原子操作:多线程编程
  • 项目:寻虫记日志系统(三)
  • 在Arduino上模拟和电子I/O工作
  • Windows 命令行:相对路径
  • 线程、进程、协程
  • Java/注解Annotation/反射/元数据
  • C++学习:哈希表的底层思路及其实现
  • 机器学习python库-Gradio
  • 创作一个简单的编程语言,首先生成custom_arc_lexer.g4文件
  • 湖北燃气瓶装送气工证考哪些科目?
  • MySQL死锁回滚导致数据丢失,如何用备份完美恢复?
  • Zustand入门及使用教程(二--更新状态)