首页 > 编程语言 >代码随想录算法训练营day17 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

代码随想录算法训练营day17 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

时间:2023-09-23 11:13:27浏览次数:59  
标签:NULL return 随想录 result path left root 257 二叉树

110.平衡二叉树

class Solution {
public:
    int getHeight(TreeNode* node){
        if(node == NULL)    
            return 0;
        
        int leftHeight = getHeight(node->left);
        if(leftHeight == -1)
            return -1;
        int rightHeight = getHeight(node->right);
        if(rightHeight == -1)
            return -1;
        
        int result;
        if(abs(leftHeight - rightHeight) > 1){
            result = -1;
        }
        else{
            result = 1 + max(leftHeight, rightHeight);
        }
        return result;
    }

    bool isBalanced(TreeNode* root) {
        return getHeight(root) == -1?   false : true; 
    }
};

257.二叉树的所有路径

class Solution {
public:

    void traversal(TreeNode* cur, vector<int>& path, vector<string>& result){
        
        path.push_back(cur->val);
        
        if(cur->left == NULL && cur->right == NULL){
            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);
            return;
        }

        if(cur->left){
            traversal(cur->left, path, result);
            path.pop_back(); //回溯
        }
        if(cur->right){
            traversal(cur->right, path, result);
            path.pop_back(); //回溯
        }
    }

    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> result;
        vector<int> path;
        if(root == NULL)    return result;
        traversal(root, path, result);
        return result;
    }
};

to_string():将当前值转换为字符串

404.左叶子之和

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        if(root == NULL)  return 0;
        if(root->left == NULL && root->right == NULL) return 0;

        int leftValue = sumOfLeftLeaves(root->left);    //左
        if(root->left != NULL && root->left->left == NULL 
            && root->left->right == NULL){
                leftValue = root->left->val;
            }
        
        int rightValue = sumOfLeftLeaves(root->right); //右

        int sum = leftValue + rightValue;   //中
        return sum;
    }
};

标签:NULL,return,随想录,result,path,left,root,257,二叉树
From: https://www.cnblogs.com/lycnight/p/17724007.html

相关文章

  • 最优二叉树(Huffman 树)
    题目\(k\)叉树\(T\)有\(n\)片树叶。每片树叶\(v_i\)的权为\(w_i\),深度为\(l(v_i)\)。\(T\)的权值为\(W=\sumw_i\l(v_i)\)。求\(W\)的最小值。和在保证\(W\)最小的情况下,\(\maxl(v_i)\)的最小值。数据范围:\(1\len\le10^5\),\(2\lek\le10\),\(0<w_i......
  • [代码随想录]Day51-单调栈part02
    题目:503.下一个更大元素II思路:总之就是走两次nums,可以拼接,也可以用下面的取余方式。代码:funcnextGreaterElements(nums[]int)[]int{lens:=len(nums)res:=make([]int,lens)fori:=0;i<lens;i++{res[i]=-1}stack:=make(......
  • 代码随想录算法训练营-贪心算法-5|56. 合并区间、738. 单调递增的数字、968. 监控二叉
    56. 合并区间时间复杂度:O(nlogn)空间复杂度:O(logn),排序需要的空间开销1classSolution:2defmerge(self,intervals):3result=[]4iflen(intervals)==0:5returnresult#区间集合为空直接返回67int......
  • 124. 二叉树中的最大路径和
    二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径和是路径中各节点值的总和。给你一个二叉树的根节点root,返回其最大路径和。示例1:输入:root=......
  • [代码随想录]Day50-单调栈part01
    题目:思路:要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了维护一个栈顶->栈底由小到大的栈;这样在之后(右侧)遇到更大的数时,就可以得到所有在他前面并且比他小的数,就能获得结果。初始化默认为0;代码:funcdailyTemperatures(n......
  • 随想录Day1|704. 二分查找、27. 移除元素
    随想录Day1|704.二分查找、27.移除元素 704.二分查找LeetCode题目文章讲解视频讲解给定n个元素升序的整形数组nums和一个目标值target,写一个函数搜索nums中的target,如果存在目标值则返回下标,否则返回-1。其中nums中的元素不重复,n在[1,10000]之间,nums的每个元素都在[-......
  • [代码随想录]Day49-动态规划part17
    题目:647.回文子串思路:整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况情况一:下标i与j相同,同一个字符例如a,当然是回文子串情况二:下标i与j相差为1,例如aa......
  • 二叉树
    二叉树搜索二叉树:左边比根小,右边比根大;子树也满足这个特征。搜索二叉树还有一个特征:去走一个中序是一个升序的状态。所以搜索二叉树可以叫做二叉排序树或二叉查找树。模板不喜欢用T了,因为喜欢用K(关键字)。推荐一般用BinarySearchTree,二叉搜索树,不要用SearchTreeBinary,因为简写出......
  • 《剑指Offer》-34-二叉树中和为某一值的路径
    思路要求是从根节点开始的路径,这会比从任意节点开始的路径简单很多思路是从根节点开始遍历每一条路径,如果和没有达到目标值就继续向下遍历大于就回退,等于就返回到结果集中,可以看到这是一个回溯动作实际过程中,首先不管是等于还是大于,回退pop()操作都要执行,这样才不会影响到后......
  • 114. 二叉树展开为链表
    给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,......