## 平衡二叉树，二叉树的路径，左叶子之和

news/2024/4/15 4:21:49/文章来源:https://blog.csdn.net/2302_77168608/article/details/136427722

## 第六章   二叉树part04

1.  110.平衡二叉树
1.  257. 二叉树的所有路径
1.  404.左叶子之和

#### 递归法：

1. 明确递归函数的参数和返回值

1. 明确终止条件

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

return getHeight(root)!=-1;

}

public int getHeight(TreeNode root)

{

if(root==null) return 0;

int leftHeight = getHeight(root.left);

if(leftHeight==-1)return -1;

int rightHeight = getHeight(root.right);

if(rightHeight==-1)return -1;

if(Math.abs(leftHeight-rightHeight)>1) return -1;

else return Math.max(leftHeight,rightHeight)+1;

}

}

### 思路

#### 递归

1. 递归函数参数以及返回值

1. 确定递归终止条件

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 List<String> binaryTreePaths(TreeNode root) {

List<String> result = new ArrayList<>();

List<Integer> paths = new ArrayList<>();

if(root==null) return result;

travesal(root,result,paths);

return result;

}

public void travesal(TreeNode root,List<String> result,List<Integer> paths)

{

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

String path = sb.toString();

return;

}

if(root.left!=null)

{

travesal(root.left,result,paths);

paths.remove(paths.size()-1);

}

if(root.right!=null)

{

travesal(root.right,result,paths);

paths.remove(paths.size()-1);

}

}

}

#### 递归法

1. 确定递归函数的参数和返回值

1. 确定终止条件

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 int sumOfLeftLeaves(TreeNode root) {

if(root==null) return 0;

if(root.left==null&&root.right==null) return 0;

int leftSum = sumOfLeftLeaves(root.left);

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

leftSum = root.left.val;

int rightSum = sumOfLeftLeaves(root.right);

int sum = leftSum+rightSum;

return sum;

}

}

### Java面试篇【并发编程】常见面试题（2024最新）

Java并发编程常见面试题 1.什么是线程和进程&#xff1f; 进程是操作系统分配资源的最小单位&#xff0c;各个进程之间占据独立的寻址空间&#xff0c;运行也是独立运行&#xff0c;进程间通信需要一些机制。进程间切换需要的开销较大。 线程是程序执行的基本单位&#xff0c…

### NodeJS实现插入排序算法

NodeJS实现插入排序算法 以下是使用Node.js实现插入排序算法的示例代码&#xff1a; function insertionSort(arr) {const n arr.length;for (let i 1; i < n; i) {let key arr[i];let j i - 1;// 将比key大的元素向右移动一位while (j > 0 && arr[j] >…

### 【STM32详解FLASH闪存编程原理与步骤】

STM32详解FLASH闪存编程原理与步骤 FLASH编程注意事项FLASH编程过程STM32的FLASH擦除过程FLASH全片擦除FLASH操作总结锁定解锁函数写操作函数擦除函数获取状态函数等待操作完成函数读FLASH特定地址数据函数 FLASH编程注意事项 1.STM32复位后&#xff0c;FPEC模块是被保护的&am…

### 【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复

【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复&#xff0c;初步分析是vue发布3.4版本以后引起的兼容性问题。 问题截图&#xff1a; 1.isFucntion is not function&#xff0c;是由于vue升级后众多插件版本不匹配造成的问题 2.弹框…

### 探索设计模式的魅力：深入解析解释器模式-学习、实现与高效使用的全指南

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 探索设计模式的魅力&#xff1a;解析解释器模式学习、实现与高效使用全指南 文章目录 一、案…