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

leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历等的介绍

文章目录

  • 前言
  • 一、单值二叉树
  • 二、相同的树
  • 三、二叉树的前序遍历
  • 四、二叉树的中序遍历
  • 五、二叉树的后序遍历
  • 六、另一棵树的子树
  • 七、二叉树的遍历
  • 总结


前言

leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历等的介绍


一、单值二叉树

leetcode原题: 单值二叉树

在这里插入图片描述


/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isUnivalTree(struct TreeNode* root) {if(root == NULL)return true;if(root->left != NULL && root->left->val != root->val )return false;if(root->right != NULL && root->right->val != root->val)return false;return isUnivalTree(root->left) && isUnivalTree(root->right);
}
  • 递归思想:
  • 每个节点都分别与它的左子树根节点和右子树根节点比较。
  • 若传入的节点为NULL,返回 true。(不违反相同的规则)
  • 若左右子树分别不为空并且分别不等于根节点则返回 false。

二、相同的树

leetcode原题:相同的树

在这里插入图片描述


/*** 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 || p != NULL && q == NULL){return false;}if(p->val != q->val){return false;}return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
  • 递归思想:
  • 两棵树同时按照根节点,左子树,右子树的顺序比较每个节点。
  • 若两个树根节点都为NULL,则返回true。
  • 若两棵树根节点只有一个为NULL,则返回false。
  • 若两棵树根节点的值不相等,则返回false。

三、二叉树的前序遍历

leetcode原题: 二叉树的前序遍历

  • 其中returnSize是数组元素的个数。传入的是数组元素个数的指针。
  • 要求返回一个数组。

在这里插入图片描述


/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/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(*returnSize * sizeof(int));int i = 0;preorder(root, a, &i);return a;
}
  • 思想:
  • 先求出这个树的节点个数,赋值给returnSize。
  • 动态申请returnSize个空间,同时定义下标变量。
  • 在函数preorder中采用前序遍历,将每个节点的值依次赋值给数组。

四、二叉树的中序遍历

leetcode原题: 二叉树的前序遍历

在这里插入图片描述


/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/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(*returnSize  * sizeof(int));int i = 0;inorder(root, a, &i);return a;
}

五、二叉树的后序遍历

leetcode原题: 二叉树的中序遍历

在这里插入图片描述

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/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(*returnSize * sizeof(int));int i = 0;postorder(root, a, &i);return a;
}

六、另一棵树的子树

leetcode原题: 另一棵树的子树

在这里插入图片描述


/*** 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)return false;if(isSameTree(root, subRoot)){return true;}return isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
}
  • 将原二叉树与给定子树进行比较。
  • 若相同返回true。
  • 若不同,原二叉树的左子树和右子树分别与给定子树比较。有一个相同则返回true。

七、二叉树的遍历

牛客网原题: 二叉树的遍历

在这里插入图片描述


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

总结

leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历等的介绍

相关文章:

  • Presto 从提交SQL到获取结果 源码详解(3)
  • qt+ffmpeg 实现音视频播放(四)之音视频同步
  • k8s——Pod进阶(资源限制和探针)
  • 解决 Git commit 或 Git merge 跑到 VIM 里面去了
  • C#中的数组探索
  • C#面:.Net中会存在内存泄漏吗,请简单描述
  • python数据库操作
  • 校园导航系统C++
  • ReDos攻击浅析
  • 【揭秘】如何借助聚道云软件连接器,实现差旅管理新飞跃!
  • 神器!!Python热重载调试【送源码】
  • 【康耐视国产案例】智能AI相机机器视觉精准快速实现包裹标签的智能粘贴
  • 问题排查|记录一次基于mymuduo库开发的服务器错误排查(段错误--Segmentation fault (core dumped))
  • 虚拟现实环境下的远程教育和智能评估系统(一)
  • 头歌数据结构与算法课程设计中-硬币找零
  • canvas 五子棋游戏
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Next.js之基础概念(二)
  • nginx 负载服务器优化
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 好的网址,关于.net 4.0 ,vs 2010
  • 马上搞懂 GeoJSON
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何用vue打造一个移动端音乐播放器
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数据科学 第 3 章 11 字符串处理
  • 智能合约Solidity教程-事件和日志(一)
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #android不同版本废弃api,新api。
  • #ifdef 的技巧用法
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)薛涌:谈贫说富
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)fiber的基本认识
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (南京观海微电子)——COF介绍
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十三)Maven插件解析运行机制
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)树状数组
  • .cn根服务器被攻击之后
  • .Family_物联网
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET DataGridView数据绑定说明
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .Net中wcf服务生成及调用