力扣---二叉树OJ题(多种题型二叉树)

这篇具有很好参考价值的文章主要介绍了力扣---二叉树OJ题(多种题型二叉树)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

👧个人主页:@小沈熬夜秃头中୧⍤⃝❅
😚小编介绍:欢迎来到我的乱七八糟小星球🌝
📋专栏:力扣—LeetCode刷题
🔑本章内容:力扣—二叉树OJ题
送给各位💌:活着就意味着要必须做点什么 请好好努力
欢迎 评论📝 +点赞👍 +收藏😽 +关注💞哦~


提示:以下是本篇文章正文内容,下面案例可供参考

🌟一、剑指 Offer 55 - I. 二叉树的深度

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。

力扣---二叉树OJ题(多种题型二叉树)

🌏1.1 链接:

剑指 Offer 55 - I. 二叉树的深度

🌏1.2 代码一:

int maxDepth(struct TreeNode* root)
{
    if(root==NULL)
    return 0;
    int leftTree=maxDepth(root->left);
    int rightTree=maxDepth(root->right);
    return leftTree>rightTree?leftTree+1:rightTree+1;
}

🌏1.3 代码二:

这种代码是正确的但是在力扣上是不能通过的时间太长具体分析可以看数据结构】—几分钟简单几步学会手撕链式二叉树(中)中求二叉树高度部分

int maxDepth(struct TreeNode* root)
{
	if (root == NULL)
		return 0;
	return maxDepth(root->left) > maxDepth(root->right) ?
		maxDepth(root->left) + 1 : maxDepth(root->right) + 1;
}

🌏1.4 流程图:

力扣---二叉树OJ题(多种题型二叉树)

🌟二、100. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

力扣---二叉树OJ题(多种题型二叉树)

🌏2.1 链接:

100. 相同的树

🌏2.2 思路:

采用前序,先比较 根 然后 左子树 右子树,而结束条件就是为空树或者不相等

🌏2.3 代码:

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);//采用逻辑与当左树不相同时,就没必要比较右树
}

🌏2.4 流程图:

力扣---二叉树OJ题(多种题型二叉树)

🌟三、965. 单值二叉树

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。

力扣---二叉树OJ题(多种题型二叉树)

🌏3.1 链接:

965. 单值二叉树

🌏3.2 思路:

采用传递性:ab bc <> ac,然后通过对比根节点和左子树,左子树,右子树来判断值是否相同

🌏3.3 代码:

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);
}

🌏3.4 流程图:

力扣---二叉树OJ题(多种题型二叉树)

🌟四、101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

力扣---二叉树OJ题(多种题型二叉树)

🌏4.1 链接:

101. 对称二叉树

🌏4.2 思路:

因为是轴对称,所以要比较左子树的值和右子树的值相同。

🌏4.3 代码:

bool _isSymmetric(struct TreeNode* leftRoot,struct TreeNode* rightRoot)
{
    if(leftRoot==NULL&&rightRoot==NULL)
    return true;
    if(leftRoot==NULL||rightRoot==NULL)
    return false;
    if(leftRoot->val!=rightRoot->val)
    return false;
    return _isSymmetric(leftRoot->left,rightRoot->right)
    &&_isSymmetric(leftRoot->right,rightRoot->left);
}
bool isSymmetric(struct TreeNode* root)
//这个函数是题给出的所以不能修改但不符合所以使用返回值
{
//因为题目给出根不为空所以只需要比较左右子树就可以了
    return _isSymmetric(root->left,root->right);
}

🌏4.4 流程图:

力扣---二叉树OJ题(多种题型二叉树)

🌟五、144. 二叉树的前序遍历

🌏5.1 链接:

144. 二叉树的前序遍历

🌏5.2 代码(错误代码):

下面这种写法是不能通过的,因为每次调用i++,都是各是各的造成了干扰具体可以看流程图

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

🌏5.3 流程图:

力扣---二叉树OJ题(多种题型二叉树)

🌏5.4 两种解决方法:

5.4.1💫第一种:给i传地址

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

5.4.2💫第而种:全局变量

📒代码:

一点注意:要在一次调用后置零,不然下次调用时就会出现i在上一次的基础值上接着走而数组就不是从0开始的

int TreeSize(struct TreeNode* root)
{
    return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
int i=0;
void _preorderTraversal(struct TreeNode* root, int* a)
{
    if(root==NULL)
    return;
    a[i++]=root->val;
    _preorderTraversal(root->left,a);
    _preorderTraversal(root->right,a);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
    *returnSize=TreeSize(root);
    int* a=(int*)malloc(sizeof(int)*(*returnSize));
    i=0;//注意这里
    _preorderTraversal(root,a);
    return a;
}


😽总结

力扣---二叉树OJ题(多种题型二叉树)
😽Ending,今天的链式二叉树的内容就到此结束啦~,如果后续想了解更多,就请关注我吧,一键三连哦 ~文章来源地址https://www.toymoban.com/news/detail-465080.html

到了这里,关于力扣---二叉树OJ题(多种题型二叉树)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二叉树OJ题:LeetCode--101.对称二叉树

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通 LeetCo

    2024年02月13日
    浏览(49)
  • 二叉树OJ题:LeetCode--226.翻转二叉树

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第226道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通 LeetCo

    2024年02月11日
    浏览(44)
  • 二叉树OJ题:LeetCode--104.二叉树的最大深度

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第104道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通  Leet

    2024年02月11日
    浏览(83)
  • 二叉树OJ题:LeetCode--144.二叉树的前序遍历

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通  Leet

    2024年02月13日
    浏览(41)
  • 二叉树(OJ)

    ---------------------------------------------------哆啦A梦的任意门------------------------------------------------------- 我们来看一下题目的具体要求:  既然我们都学了二叉树了,我们就应该学会如何去递归。 分析一下: 我们如果去用遍历的思路去做,肯定是可以做出来的,遍历嘛,先将第一

    2023年04月12日
    浏览(39)
  • 二叉树基础oj题目

    前文中,介绍了二叉树的基本概念及基础操作,进一步对于二叉树的递归遍历及子问题的处理思想有了一定的了解。本文将带来几道二叉树经典的oj题目。 对称二叉树 平衡二叉树 二叉树的层序遍历 leetcode题目链接 题目描述:给你一个二叉树的根节点 root , 检查它是否轴对称

    2024年01月21日
    浏览(44)
  • Leetcode-二叉树oj题

    144. 二叉树的前序遍历 https://leetcode.cn/problems/binary-tree-preorder-traversal/ 这个题目在遍历的基础上还要求返回数组,数组里面按前序存放二叉树节点的值。 既然要返回数组,就必然要malloc一块空间,那么我们需要算出这个二叉树的节点个数,所以就创建一个函数TreeSize求出节点

    2024年02月05日
    浏览(38)
  • 数据结构——二叉树(OJ练习)

    大家好,本期是二叉树的最后一期,这一期我们来看看二叉树的编程题 . - 力扣(LeetCode) 首先我们的思路是: 遍历二叉树,把每个节点去比较一次,按照要求返回 我们来看代码 . - 力扣(LeetCode) 这里我们的思路是:同时遍历两给树,遇到空树或者不相等时返回。 . - 力扣

    2024年04月12日
    浏览(44)
  • 【深入理解二叉树OJ题】

    航班直达! 前序遍历的思想。 思路:先判断左右节点是否存在,再判断根分别和左右节点的值是 否相等。 1.如果左子节点存在,但是值不等于根节点的值,返回false 2.如果右子节点存在,但是值不等于根节点的值,返回false 如果相等,递归其左子节点和右子节点。 不拿如果

    2023年04月18日
    浏览(39)
  • 二叉树基础oj题自测

    解题思路: 遍历二叉树,并且每一个节点值都和根节点的值进行比对,如果不等于根节点的值,则不是单值树。 解题思路: 首先比较根节点是否相同,然后分别比较左右子树是否相同。 解题思路: 判断一个树是否对称,首先要判断左右孩子是否对称相等,还需要判断左孩

    2023年04月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包