代码随想录算法训练营第十五天-110平衡二叉树 、257二叉树的所有路径、404左叶子之和
Kiml Lv5
  • 前言
    状态:110,404AC,257 不会。迭代法没有写

  • 更新

1
24.06.06 初始记录

初步题解

110 平衡二叉树

题目链接:(https://leetcode.cn/problems/balanced-binary-tree/)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class LE110 {  
public boolean isBalanced(TreeNode root) {
return getHeight(root) != -1;
}

private 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;
}
return 1 + Math.max(leftHeight, rightHeight);
}
}

257 二叉树的所有路径

题目链接:(https://leetcode.cn/problems/binary-tree-paths/description/)

(不会)

404 左叶子之和

1
2
3
4
5
6
7
8
9
10
11
public int sumOfLeftLeaves(TreeNode root) {  
if (root == null) {
return 0;
}

int sum = 0;
if (root.left != null && root.left.left == null && root.left.right == null) {
sum += root.left.val;
}
return sum + sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}

看解析

110 平衡二叉树

题目链接/文章讲解/视频讲解:(https://programmercarl.com/0110.平衡二叉树.html)

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

257 二叉树的所有路径

题目链接/文章讲解/视频讲解:(https://programmercarl.com/0257.二叉树的所有路径.html)

主要是这个回溯有点懵,不知道怎么写了。但是写完代码跟着断点跑一遍,可以看到:在有下个节点时,会一直递归,直到进入到最后一个节点。在返回的途中,会把所有的进入操作,回退回去(即回退到交叉节点那个位置)。可能表述的不是很清楚,写完代码跑一遍就清楚了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static List<String> binaryTreePaths(TreeNode root) {  
List<String> pathString = new ArrayList<>();
if (root == null) {
return pathString;
}
List<Integer> path = new ArrayList<>();
binaryTree(root, path, pathString);
return pathString;
}

private static void binaryTree(TreeNode root, List<Integer> path, List<String> pathString) {
path.add(root.val);

if (root != null && (root.right == null && root.left == null)) {
pathString.add(path.stream().map(Object::toString).collect(Collectors.joining("->")));
return;
}

if (root.left != null) {
binaryTree(root.left, path, pathString);
path.remove(path.size() - 1);
}
if (root.right != null) {
binaryTree(root.right, path, pathString);
path.remove(path.size() - 1);
}
}

404 左叶子之和

题目链接/文章讲解/视频讲解:(https://programmercarl.com/0404.左叶子之和.html)

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量