二叉树相关的简单递归oj

这篇具有很好参考价值的文章主要介绍了二叉树相关的简单递归oj。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这篇博客主要是博主感觉对二叉树oj题目不太熟悉,随便整理的一下题目和解答,方便复习,所以讲题部分主要以我自己以及为我以后便于复习的简便语言来描述,看官可以当作的题目随便刷一下,如果看不懂可以自己画一下递归展开图。

题目

二叉树的前序遍历

oj链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/
二叉树相关的简单递归oj
二叉树相关的简单递归oj
这道题并不难,难的是给了个参数returnSize
其实这里就是要求,以前序遍历的排列方式,将二叉树的值放入至一个数组中,并且返回数组大小就好。

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

相似的还有前序遍历,后序遍历,这里就不放出来了。

相同的树判断

oj链接:https://leetcode.cn/problems/same-tree/
二叉树相关的简单递归oj
这个题目不要用遍历的角度去看,虽然实现角度确实是遍历,但是为了方便理解还是用分治方法去思考
让q和p一起去递归,一起走q和p的左子树比较,然后走右子树的比较,如果一样,返回他们对应的布尔值,不一样就返回false。

bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
    if(p==NULL&&q==NULL)
        return true;
    if(p==NULL||q==NULL)
        return false;
    if(q->val!=p->val)
        return false;
     return (isSameTree(q->left,p->left)&&isSameTree(q->right,p->right));
}

单值二叉树

oj链接:https://leetcode.cn/problems/univalued-binary-tree/
二叉树相关的简单递归oj
这道题让根值与左子树以及右子树的值比较就好,同时要判断左子树和右子树是否为空,然后同时比较返回左子树和右子树的比较值就好。

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

对称二叉树

oj链接:https://leetcode.cn/problems/symmetric-tree/
二叉树相关的简单递归oj
这道题很简单

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

另一棵树的子树

oj链接:https://leetcode.cn/problems/subtree-of-another-tree/
二叉树相关的简单递归oj

这道题递归套递归就好

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

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
    if(root==NULL)
        return false;
    if(sameTreeNode(root,subRoot))
        return true;
    return isSubtree(root->left,subRoot)
    || isSubtree(root->right,subRoot);
}

创建二叉树并遍历

oj链:https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking

这道题就稍微创建有点难,但而不至于到较难文章来源地址https://www.toymoban.com/news/detail-433109.html

#include <stdio.h>
#include<stdlib.h>

typedef  struct TreeNode
{
    struct TreeNode* left;
    struct TreeNode* right;
    char data;
}TreeNode;
void inOrder(TreeNode* root)
{
    if(root==NULL)
    {
        return;
    }
    inOrder(root->left);
    printf("%c ",root->data);
    inOrder(root->right);        

}
TreeNode* creattree(char* arr,int* y)
{
    if(arr[*y]=='#')
    {
        (*y)++;
        return NULL;
    }
    TreeNode* ptr=(TreeNode*)malloc(sizeof(TreeNode));
    ptr->data=arr[*y];
    (*y)++;
    ptr->left=creattree(arr,y);
    ptr->right=creattree(arr,y);
    return ptr;
}
int main() 
{
    char arr[200];
    int y=0;
    scanf("%s",arr);
    TreeNode* tree=creattree(arr,&y);
    inOrder(tree);
}

到了这里,关于二叉树相关的简单递归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)
  • Leetcode-二叉树oj题

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

    2024年02月05日
    浏览(38)
  • 二叉树基础oj题目

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

    2024年01月21日
    浏览(44)
  • 每日OJ题_二叉树dfs③_力扣814. 二叉树剪枝

    目录 力扣814. 二叉树剪枝 解析代码 814. 二叉树剪枝 难度 中等 给你二叉树的根结点  root  ,此外树的每个结点的值要么是  0  ,要么是  1  。 返回移除了所有不包含  1  的子树的原二叉树。 节点  node  的子树为  node  本身加上所有  node  的后代。 示例 1: 示例 2: 示

    2024年02月22日
    浏览(42)
  • 【深入理解二叉树OJ题】

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

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

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

    2023年04月17日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包