首页 > 其他分享 >代码随想录刷题day13 | LeetCode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

代码随想录刷题day13 | LeetCode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

时间:2024-09-19 20:21:36浏览次数:14  
标签:node result return 随想录 back 二叉树 path 257 left

110.平衡二叉树

力扣题目链接

后序遍历求高度,高度判断是否平衡 | LeetCode:110.平衡二叉树

1.三元运算符:( ? :

condition ? expression_if_true : expression_if_false;

前面是条件,如果符合就等于冒号前的expression_if_true,反之则是后面的。

2.如果要使用 if ( ! node -> left ),要注意空指针,下文如果要使用,可以先  if  ( node -> left ),也

就是我们所说的空指针不进入操作。 

3.abs()绝对值函数

例如 if ( abs ( leftHeight - rightHeight ) > 1)  // 如果左右子树高度差大于 1,则不平衡 return -1;

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(root==nullptr)
            return true;
        return iB(root)==-1 ? false : true;
    }
    int iB(TreeNode* node)
    {
        if(node==nullptr)
            return 0;
        int leftnum=iB(node->left);
        if(leftnum==-1)
            return -1;
        int rightnum=iB(node->right);
        if(rightnum==-1)
            return -1;
        if(abs(leftnum-rightnum)>1)
            return -1;
        return max(leftnum,rightnum)+1;
    }
};

257. 二叉树的所有路径

 力扣题目链接

​​​​​​递归中带着回溯,你感受到了没?| LeetCode:257. 二叉树的所有路径

1.push_back() 只能用来向 string 中添加单个字符

例如 str . push_back ( 'W' ) ;

而在vector<string>中,你可以使用push_back 来添加新的字符串

例如 result . push_back ( Spath ) ;

2.string 中 + = 可以添加字符串。

3.注意里面有回溯的过程

 path . pop_back ( ) ;

class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<int> path;
        vector<string> result;
        if(!root)
            return result;
        gettreePath(root,path,result);
        return result;
    }
    void gettreePath(TreeNode* node,vector<int> &path,vector<string> &result){
        path.push_back(node->val);
        if(!node->left&&!node->right){
            string Spath;
            for(int i=0;i<path.size()-1;i++){
                Spath+=to_string (path[i]);
                Spath+="->";
            }
            Spath+=to_string (path[path.size()-1]);
            result.push_back(Spath);
        }
        if(node->left){
            gettreePath(node->left,path,result);
            path.pop_back();
        }
        if(node->right){
            gettreePath(node->right,path,result);
            path.pop_back();
        }
    }
};

404.左叶子之和

力扣题目链接

二叉树的题目中,总有一些规则让你找不到北 | LeetCode:404.左叶子之和

关于getsum函数中 &sum,至于为什么这里要加引用呢?

如果不加引用,就是按值传递,每次进入递归函数时,sum 的值都会复制为当前的值,但修改的只

是副本。函数返回后,外部的 sum 仍然保持原始值,未发生任何累加,也就是0。

特别注意平时我们解二叉树的题目时,已经习惯了通过节点的左右孩子判断本节点的属性,而本题

我们要通过节点的父节点判断本节点的属性。

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        int result=0;
        if(!root)
            return 0;
        getsum(root,result);
        return result;
    }
    void getsum(TreeNode* node,int &sum){
        if(node->left&&!node->left->left&&!node->left->right)
            sum+=node->left->val;
        if(node->left)
            getsum(node->left,sum);
        if(node->right)
            getsum(node->right,sum);
    }
};

 

标签:node,result,return,随想录,back,二叉树,path,257,left
From: https://blog.csdn.net/2301_80886645/article/details/142361801

相关文章

  • 代码随想录算法训练营,9月19日 | 39. 组合总和,40.组合总和II,131.分割回文串
    39.组合总和题目链接:39.组合总和文档讲解︰代码随想录(programmercarl.com)视频讲解︰组合总和日期:2024-09-19想法:组合总和类型题,允许重复使用元素,递归不+1就行。Java代码如下:classSolution{List<Integer>path=newArrayList<>();List<List<Integer>>res=n......
  • 代码随想录总结篇
    数组一般是排序以及索引问题链表翻转,重组,环问题哈希(map)hash暂存结果实现时间复杂度缩小字符串翻转,kmp算法,最长公共序列双指针快慢指针,左右指针栈队列先入先出后入先出二叉树二叉树dfs,bfsdfs计算深度高度二叉搜索树相关问题回溯递归三部曲参数返回值,终止条......
  • 正式一刷代码随想录-day01
    数组T35 搜索插入位置1.想清楚边界,是否需要left<=right2.想清楚如果没有找到的几种情况,有没有遗漏的情况。3.此题需要注意返回的不可超过边界值。T34  在排序数组中查找元素的第一个和最后一个位置1.分析题目:三种情况:1.target不在数组大小的范围内2.在范围内但不在数......
  • Day18 二叉树part08| LeetCode 669. 修剪二叉搜索树 , 108.将有序数组转换为二叉搜索树
    669.修剪二叉搜索树669.修剪二叉搜索树classSolution{publicTreeNodetrimBST(TreeNoderoot,intlow,inthigh){if(root==null)returnnull;//处理节点值<low的情况:当前节点及其左子树的所有节点都不在范围内,继续在其右子树上修......
  • 代码随想录算法 - 回溯算法1
    题目177.组合给定两个整数n和k,返回范围[1,n]中所有可能的k个数的组合。你可以按任何顺序返回答案。示例1:输入:n=4,k=2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例2:输入:n=1,k=1输出:[[1]]提示:1<=n<=201<=k<=......
  • 【数据结构】二叉树的遍历
    堆的应用堆排列堆排序即利用堆的思想来进行排序,总共分为两个步骤:建堆升序:建大堆降序:建小堆利用堆删除思想来进行排序建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。voidHeapSort(int*a,intn){ //a数组直接建堆O(N) for(inti=......
  • 代码随想录算法训练营,9月18日 | 77.组合,216.组合总和III,17.电话号码的字母组合
    回溯算法理论基础:1.回溯是递归的副产品,有递归就有回溯。2.回溯的本质是穷举,想让回溯法高效些,可以加一些剪枝的操作3.组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按......
  • 代码随想录Day3 | LeetCode 203. 移除链表元素、LeetCode 707. 设计链表、LeetCode 20
    LeetCode203.移除链表元素链表基础概念题,也可以用递归做,不过我们把递归的思想放在更能体现它的LeetCode206.反转链表#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next......
  • 代码随想录Day4 | LeetCode 24. 两两交换链表中的节点、LeetCode 19. 删除链表的倒数
    LeetCode24.两两交换链表中的节点递归思想#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defswapPairs(self,head:Optional[ListNode......
  • 数据结构(二叉树)练习题————考前必备合集
    今天在力扣和牛客网上找了一下题,下面附上题目链接,大家先做题再看答案1.检查两颗树是否相同。100.相同的树-力扣(LeetCode)2.另一颗树的子树。572.另一棵树的子树-力扣(LeetCode)3.翻转二叉树。226.翻转二叉树-力扣(LeetCode)4.判断一颗二叉树是否是平衡二叉树。110.......