首页 > 编程语言 >算法训练15-1判断平衡二叉树+二叉树的所有路径

算法训练15-1判断平衡二叉树+二叉树的所有路径

时间:2024-10-14 21:17:52浏览次数:3  
标签:right TreeNode cur val 算法 二叉树 15 root left

题目1:给定一个二叉树,判断它是否是 平衡二叉树

  

解法

主要考察高度,后序遍历->需要递归法->递归法三步走

/**

 * 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 boolean isBalanced(TreeNode root) {

        /*//平衡二叉树->高度->root节点的左节点和右节点是否是高度差<=1->后序遍历->迭代法

        //1.输入参数,和输出

        public int getHeight(ListNode cur){

            int d;

           

            return -1;

            return d;

        }

        //2.终止条件

        if(cur==null){

            break

        }

        //3.单层逻辑

            //1.左/右节点本身就是不平衡二叉树

            if( getHeight(cur.left())==-1||getHeight(cur.right())==-1){

                return -1;

            }

            //左右相剪

            int d;

            d=|getHeight(cur.left())-getHeight(cur.right())|

            if(d<=1){

                return d;

            }else{

                return -1;

            }*/

         

        return getHeight(root)!=-1;

         //主方法  

    }

     public int getHeight(TreeNode cur){

           if(cur==null){

            return 0;

            }

            if( getHeight(cur.left)==-1||getHeight(cur.right)==-1){

                return -1;

            }

            int d;

            d=Math.abs(getHeight(cur.left)-getHeight(cur.right));

            if(d<=1){

                return Math.max(getHeight(cur.left),getHeight(cur.right))+1;

            }else{

                return -1;

            }

        }

}

 题目二:二叉树的所有路径

给你一个二叉树的根节点 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) {

        //1.主方法

        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 root, List<Integer>paths,List<String>res){

        //1.前序遍历添加中

        paths.add(root.val);

        //遇到叶子节点

        if(root.left==null&&root.right==null){

            //遍历输出path里的各个节点的值

            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){

            traveral(root.left,paths,res);

            paths.remove(paths.size()-1);//回溯

        }

        if(root.right!=null){

            traveral(root.right,paths,res);

            paths.remove(paths.size()-1);//回溯

        }

    }

}

 题目三

标签:right,TreeNode,cur,val,算法,二叉树,15,root,left
From: https://blog.csdn.net/xiyujiang/article/details/142926489

相关文章

  • 非线性非高斯模型的改进粒子滤波算法(Matlab代码实现)
      ......
  • 代码随想录算法训练营第三十四天|134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据
    134.加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的......
  • 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游
    122.买卖股票的最佳时机II给定一个数组,它的第 i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:[7,1,5......
  • 代码随想录算法训练营第三十一天|455.分发饼干 376. 摆动序列 53. 最大子序和
    455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j] 。如果s[j] >=g[i],我们可以将这个饼干j分配给孩子i,......
  • Manacher 算法
    \(Manacher\)算法\(Manacher(马拉车)\)算法,是一种高效解决最长回文子串问题的算法。其\(O(n)\)的复杂度相较于暴力\(O(n^2)\)和字符串哈希\(O(nlogn)\)来说,快了不少。算法实现:首先说一下暴力的解法,对于每一个字符串上的字符,考虑以其为起点,向两边扩展。若字符串上回文......
  • C学习笔记 基础算法整理 (10.9 - )(正学习,持续更新中)
    本文涵盖了适合初学者学习的基础、经典算法。包括:递归递推、排序、搜索/查找、枚举、图/树遍历、动态规划等。推荐了解  C语言各部分基本知识  后进行学习。学习使用算法,可以:了解针对某类问题的通用解决方案提高逻辑思维能力将复杂的任务分解为简单的步骤精简代码,避免......
  • 代码随想录算法训练营第八天(1)|哈希表理论基础
    文档讲解:代码随想录难度:有一点哈希表理论基础哈希表首先什么是哈希表,哈希表(英文名字为Hashtable,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hashtable就可以了)。哈希表是根据关键码的值而直接进行访问的数据结构。这么官方的解释可能有点懵,其实......
  • 双向RRT路径搜索算法matlab代码
    一、实现效果见:双向RRT路径搜索算法流程、注意事项-CSDN博客二、代码完整代码见:https://download.csdn.net/download/m0_69611489/89882862clcclearcloseall%%设置环境S=[0.50.5];E=[99.599.5];Limit=[01000100];ob=[5050;7080];ob_r=[15;7];step=1;iu......
  • 题解:P2315 [HNOI2005] 数三角形
    ProblemLink[HNOI2005]数三角形题意输入一个大三角形的各个边存在情况,输出里面有多少个正三角形。Solution简单暴力即可,用\(4\)个数组维护每条边能延伸的最大长度,然后逐个判断三角形是否可行即可。如图,l_upper维护左端点向上(即$\ell_{BA}$),l_lower维护左端点向下(即......
  • 2025秋招NLP算法面试真题(二十二)-大模型参数高效微调技术总结与对比
    目录当前高效微调技术的简述BitFitPrefixTuningPromptTuningP-TuningP-Tuningv2AdapterTuningAdapterFusionAdapterDropLoRAAdaLoRA<......