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

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

时间:2023-06-09 18:02:06浏览次数:49  
标签:node paths return 随想录 404 二叉树 null root

110.平衡二叉树

力扣题目链接(opens new window)

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

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

返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

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

返回 false 。

思路:

平衡二叉树,求的是左右子树的高度差是否小于等于1,求高度用后序遍历的方法。求深度用前序遍历方法

第一步,输入类型和返回参数 -> int getHeight(TreeNode node)

第二步,终止条件 -> node == null , return 0

第三步,递归逻辑,先计算左子树高度,如果等于-1,则返回-1;再计算右子树,最后计算他俩相减的绝对值高度差。

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) != -1;
    }

    private int getHeight(TreeNode cur){
        if(cur == null) return 0;
        int leftHeight = getHeight(cur.left);
        if(leftHeight == -1) return -1;
        int rightHeight = getHeight(cur.right);
        if(rightHeight == -1) return -1;

        if(Math.abs(leftHeight - rightHeight) > 1){
            return -1;
        }
        return Math.max(leftHeight, rightHeight)+1;
    }
}

257. 二叉树的所有路径

力扣题目链接(opens new window)

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例: 

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

思路:

递归法,第一步:递归函数参数以及返回值

第二步:递归终止条件

第三步:确定单层递归逻辑

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new ArrayList<>();
        if(root == null) return res;
        List<Integer> paths = new ArrayList<>();
        traveral(root, paths, res);
        return res;
    }

    private void traveral(TreeNode node , List<Integer> paths, List<String> res){
        paths.add(node.val);
        if(node.left == null && node.right == null){
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < paths.size()-1; i++){
                sb.append(paths.get(i)).append("->");
            }
            sb.append(paths.get(paths.size()-1));
            res.add(sb.toString());
        }
        if(node.left != null){
            traveral(node.left, paths, res);
            paths.remove(paths.size()-1);
        }
        if(node.right != null){
            traveral(node.right, paths, res);
            paths.remove(paths.size()-1);
        }

    }
}

404.左叶子之和

力扣题目链接(opens new window)

计算给定二叉树的所有左叶子之和。

示例:

代码随想录算法训练营第十七天|● 110.平衡二叉树  ● 257. 二叉树的所有路径  ● 404.左叶子之和 _递归_04

思路:

递归用法,还是前序遍历的中左右顺序,首先第一步判断输入的参数值和返回值,发现可以直接用目标函数,其次终止条件肯定是root == null终止,最后判断递归循环的逻辑,一定是中左右或者左右中都行,左叶子包括,意思就是左子树的左孩子,是个叶子节点,右子树的左孩子,是个叶子节点,将数值相加即可。

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root == null) return 0;
        int leftvalue = sumOfLeftLeaves(root.left);
        int rightvalue = sumOfLeftLeaves(root.right);

        int midvalue = 0;
        if(root.left != null && root.left.left == null && root.left.right == null){
            midvalue = root.left.val;
        }
        return midvalue + leftvalue+rightvalue;
    }
}

标签:node,paths,return,随想录,404,二叉树,null,root
From: https://blog.51cto.com/u_15505301/6449720

相关文章

  • EasyRTMPLive拉转推硬件设备访问端口返回404报错,该如何解决?
    TSINGSEE青犀视频的各个平台部署灵活,视频能力丰富且全面、能满足用户的多场景视频监控需求。平台各具特点,可支持多类型的设备、多协议接入,包括国标GB28181协议、RTMP/RTSP/Onvif协议、海康EHOME、海康SDK、大华SDK等,在视频流分发上,能支持全终端、全平台的视频流输出,包括RTSP、RTMP......
  • 代码随想录day02
    第一章 数组part02977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方双指针法,平方数组为两边大中间小。 209.长度最小的子数组第一想法暴力两个for循环。学习双指针的滑动窗口法。 59.螺旋矩阵II坚持循环不变量原则,左闭右开。这道......
  • 解决Vue项目在刷新页面时出现404错误的问题
    使用HTML5的history模式的问题在本地运行Vue项目时,可以直接点击路由跳转,并且刷新页面也没有问题。这是因为VueRouter默认使用HTML5的history模式,它通过修改浏览器历史记录来控制页面跳转,而不发送实际的HTTP请求。然而,当将Vue项目发布到服务器上时,服务器会根据实际的HTTP请求来......
  • 算法学习day14二叉树part01-94、144、145
    packageLeetCode.Treepart01;importjava.util.ArrayList;importjava.util.List;publicclassTraversal{publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>result=newArrayList<Integer>();pre......
  • 二叉树的性质
    性质1: 在二叉树的第i层至多有2^(i-1)个节点  ,至少有1个节点               (度:节点拥有的子节点的个数)性质2:在深度为k的二叉树中,至多有2^k-1个节点,至少有k个节点性质3:对任何一颗二叉树,叶子个数为n0,度数为2的节点个数为n......
  • 代码随想录算法训练营第十五天|● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉
    102.二叉树的层序遍历力扣题目链接(opensnewwindow)给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。思路:迭代法,非递归思路,借用队列,先进先出来达到层序遍历的效果。但写的过程中,我不知道该如何让同一层的数据都保存在一个数组里。看了题解发......
  • 二叉树
    (不是太太太理解)1、结构体定义typedefstructBiTNode{TElemTypedata;structBiTNode*lchild,*rchild;}BiTNode;2、构造二叉树intCreateBTree(BiTNode**tp)//?{//构造方法,或者说构造顺序,从左子树开始构造intx;printf("pleaseinpyutint......
  • 数据结构与算法-06树及二叉树
    树和二叉树完全二叉树:除了最下层,每一层都满了满二叉树:每一层都满了平衡二叉树:任意两个节点的高度差不大于1排序二叉树:链式存储常见应用场景xml/html解析路由协议mysql数据库索引文件系统结构二叉树在二叉树的第i层上至多有2^(i-1)个结点深度为k的二叉树......
  • 【锐格】数据结构-实验-二叉树
    7075#include<iostream>#include<cstdio>usingnamespacestd;typedefstructTNode{chardata;structTNode*lchild,*rchild;}BiNode,*BiTree;BiTreeT;voidcreateTree(BiTree&T){charch;cin>>ch;if(ch==&#......
  • 代码随想录算法训练营第十四天|理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代
    理论基础满二叉树概念完全二叉树概念二叉搜索树概念平衡二叉搜索树概念二叉树存储方式:链式存储和顺序存储二叉树遍历方式:前中后序遍历,层次遍历。二叉树的代码定义publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.v......