首页 > 其他分享 >代码随想录17 | 104.二叉树的最大深度 | 222.完全二叉树的节点个数 | 104.二叉树的最大深度 104. 二叉树的最大深度

代码随想录17 | 104.二叉树的最大深度 | 222.完全二叉树的节点个数 | 104.二叉树的最大深度 104. 二叉树的最大深度

时间:2023-03-17 10:13:43浏览次数:47  
标签:right res 二叉树 深度 null root 104 left

110. 平衡二叉树

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

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

算法

如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。

 1 class Solution {
 2     private int height(TreeNode root) {
 3         if (root == null) return 0;
 4         int left = height(root.left);
 5         int right = height(root.right);
 6         if (left == -1 || right == -1 || Math.abs(left - right) > 1) {
 7             return -1;
 8         }
 9 
10         return Math.max(left, right) + 1;
11 
12     }
13     public boolean isBalanced(TreeNode root) {
14         return height(root) != -1;
15     }
16 }

257. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new ArrayList<>();
        if (root == null) {
            return res;
        }
        List<Integer> paths = new ArrayList<>();
        traversal(root, paths, res);
        return res;
    }
    private void traversal(TreeNode root, List<Integer> paths ,  List<String> res ) {
        paths.add(root.val);
        if (root.left == null && root.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());
            return;
        }
        if (root.left != null) {
            traversal(root.left, paths, res);
            paths.remove(paths.size() - 1);
        }
        if (root.right != null) {
            traversal(root.right, paths, res);
            paths.remove(paths.size() - 1);
        }
    }
}

 

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new ArrayList<>();
        if (root == null) {
            return res;
        }
        helper(root, String.valueOf(root.val), res);
        return res;
    }

    private void helper(TreeNode root, String path, List<String> res) {
        if (root == null) {
            return;
        }
        if (root.left == null && root.right == null) {
            res.add(path);
            return;
        }
        if (root.left != null) {
            helper(root.left, path + "->" + String.valueOf(root.left.val), res);
        }
        if (root.right != null) {
            helper(root.right, path + "->" + String.valueOf(root.right.val), res);
        }
    }
}

 

404. 左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。

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;
        }
        int sum = midValue + leftValue + rightValue;  // 中
        return sum;
    }
}

 

标签:right,res,二叉树,深度,null,root,104,left
From: https://www.cnblogs.com/libertylhy/p/17225599.html

相关文章

  • 【leetcode】226.翻转二叉树
    翻转二叉树leetcode题目传送门题目描述思路按顺序依次交换二叉树的左右节点实现交换左右节点,递归遍历publicclassTreeNode{publicintval;......
  • 动手学深度学习v2——第六章predict_ch6
    在QA环节,有位同学问了第六章的predict函数在哪,书中没有给出,使用predict_ch3稍作更改可得。defpredict_ch6(net,test_iter,device,n=6):#@save"""预测标签(定义......
  • 06.深度学习--分类模型
    分类模型输入对象x,输出是这个对象属于哪一个类class,这样的应用同样有很多,比如:在金融上可以通过分类模型来决定是否贷款给某人;图像识别方面;人脸辨识方面,等等。这里依然使......
  • 05.深度学习--回归模型
    回归模型回归模型,可以做很多预测模型,比如:一个很好的股票预测系统,我们可以找到一个function,预测的数据可以是选择过去十年的股票数据,根据这些数据我们希望得到的是明天的股......
  • 104前端之函数防抖,函数节流
    函数防抖和函数节流是JavaScript中常用的性能优化技巧,它们的目的是减少函数执行的次数,从而提高页面的响应速度和性能。下面是两个常见的应用场景:​ 1.函数防抖函数防......
  • 深度缓冲
    深度缓冲是什么?OpenGL中的深度缓冲(DepthBuffer)是一种用于存储场景中每个像素的深度信息的内存区域。深度信息可以理解为每个像素与观察点的距离,也可以理解为像素的z轴坐......
  • 代码随想录16 | 104.二叉树的最大深度 | 222.完全二叉树的节点个数 | 104.二叉树
    104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二......
  • day15 打卡102. 二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 2
    day15打卡102.二叉树的层序遍历226.翻转二叉树101.对称二叉树2102.二叉树的层序遍历102题目链接1.使用队列classSolution{publicList<List<Integer>>le......
  • 算法随想Day38【动态规划】| LC494-目标和、LC1049-最后一块石头的重量Ⅱ、LC474-一和
    01背包的应用分割等和子集:给一个weight的背包,尽量往里塞满,如果有刚刚塞满的组合,则返回true。问的是是否存在刚刚好塞满weight背包的组合。最后一块石头的重量Ⅱ:给一个......
  • 二叉树的实现及应用
    本文记录二叉树的数据结构定义及基本操作的算法描述,并对算法进行简单应用。采用C语言实现。源程序//BiTree.c#include<stdio.h>#include<stdlib.h>//二叉树......