首页 > 其他分享 >刷爆leetcode第九期

刷爆leetcode第九期

时间:2024-07-07 19:27:34浏览次数:24  
标签:return val int 二叉树 第九期 root leetcode left

题目一 单值二叉树

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

题目图片如下

我们这里主要是判断下 根的值和它的左孩子还有右孩子相不相等

如果相等返回true 如果不相等返回false

(当然这里还需要考虑一个问题 就是左右孩子可能为空的问题 )

当左右孩子为空的时候 返回true

我们首先写出以下代码

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

我们来看这里

第二个判断条件中

如果左值不为空 且左值等于右值

这个时候能判断是真还是假了嘛?

显然不能 这时候还需要判断右值 还需要判断空的情况

所以说我们这么写

if(root->left && root->left->val != root ->val)

这样子写 如果这个条件成立的话就可以直接返回假了

接下来只要再判断下右边值还有后面的就可以

代码表示如下

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

 

题目二 二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

题目图如下

这里结合过我们之前学过的前序遍历

它其实是一个很简单的问题

但是这里要注意的有两点

第一点 关于开辟动态内存大小的问题 我们可以先算出二叉树节点的个数

这个很简单 直接贴代码

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

第二点 关于递归的问题

这里我们不能在主函数中递归

我们来看看主函数中设定了哪些值

 // 判断二叉树有多少节点
    *returnSize = TreeSize(root);
    //开辟动态内存并且设立i作为数组下标
    int*a = (int*)malloc(*returnSize*sizeof(int));
    int i = 0;

如果在主函数中递归的话 那么就会不断的开辟新的动态内存导致错误

而且会重置i的值

好了 我们写完的代码全部表示如下

 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);
    //开辟动态内存并且设立i作为数组下标
    int*a = (int*)malloc(*returnSize*sizeof(int));
    int i = 0;
    
    preorder(root,a,&i);
    return a;
}

我们来测试下代码

可以运行

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言 

标签:return,val,int,二叉树,第九期,root,leetcode,left
From: https://blog.csdn.net/Zbldx/article/details/140249546

相关文章

  • 刷爆leetcode第十期
    题目一相同的树给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。首先我们要来判断下它们的根是否相等根相等的话是否它们的左子树相等是否它们的右子树相等一直到子树为空为止大......
  • Leetcode刷题记录1 哈希+双指针+滑动窗口
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言hot1001.哈希#1.两数之和#49.字母异位词分组#128.最长连续序列2.双指针#283.移动零#11.盛最多水的容器#15.三数之和#42.接雨水3.滑动窗口#3.无重复字符的最长子串#438.找到字符串中所有......
  • [Leetcode]经典算法
    检测环快慢指针法是一种用于检测链表中是否存在环的有效方法,同时也可以找到环的起点。该方法的原理基于两个指针在链表上同时移动,其中一个移动得更快,而另一个移动得更慢。检测环的存在:使用两个指针,一个称为快指针(fast),一个称为慢指针(slow)。在每一步中,快指针向前移动两步,而慢......
  • leetcode678:有效的括号字符串
    给你一个只包含三种字符的字符串,支持的字符类型分别是 '('、')' 和 '*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。有效 字符串符合如下规则:任何左括号 '(' 必须有相应的右括号 ')'。任何右括号 ')' 必须有相应的左括号 '(' 。左括......
  • 【LeetCode 0024】【链表】交换单链表相邻两个节点
    SwapNodesinPairsGivena linkedlist,swapeverytwoadjacentnodesandreturnitshead.Youmustsolvetheproblemwithout modifyingthevaluesinthelist’snodes(i.e.,onlynodesthemselvesmaybechanged.)Example1:**Input:**head=[1,2,3......
  • 【LeetCode 0141】【链表】【双指针之快慢指针】判断给定单链表是否存在环
    LinkedListCycleGivenhead,theheadofalinkedlist,determineifthelinkedlisthasacycleinit.Thereisacycleinalinkedlistifthereissomenodeinthelistthatcanbereachedagainbycontinuouslyfollowingthe next pointer.Internal......
  • [LeetCode] 1366. Rank Teams by Votes 通过投票对团队排名
    Inaspecialrankingsystem,eachvotergivesarankfromhighesttolowesttoallteamsparticipatinginthecompetition.Theorderingofteamsisdecidedbywhoreceivedthemostposition-onevotes.Iftwoormoreteamstieinthefirstposition,wecon......
  • leetcode 257. 二叉树的所有路径
    给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。 示例1:输入:root=[1,2,3,null,5]输出:["1->2->5","1->3"]示例2:输入:root=[1]输出:["1"]java解题思路及代码实现递归法packagecom.java......
  • leetcode 102. 二叉树的层序遍历
    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]提示:树中节点数目在范围 [0,2000] ......
  • leetcode77组合——经典回溯算法
    本文主要讲解组合的要点与细节,以及回溯算法的解题步骤,按照步骤思考更方便理解 c++和java代码如下,末尾给定两个整数 n 和 k,返回范围 [1,n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。 具体要点:1.首先,这道题的暴力解法是k层for循环,遍历所有的......