代码随想录 Day17 - 二叉树(四)
作者:jjn0703
- 2023-07-16 江苏
本文字数:1958 字
阅读完需:约 6 分钟
作业题
110. 平衡二叉树
/**
* 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) {
if (root == null) {
return true;
}
int leftDepth = getDepth(root.left);
int rightDepth = getDepth(root.right);
if(Math.abs(leftDepth - rightDepth) > 1) {
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
private int getDepth(TreeNode node) {
if (node == null) {
return 0;
}
int left = getDepth(node.left);
int right = getDepth(node.right);
return Math.max(left, right) + 1;
}
}
复制代码
257. 二叉树的所有路径
回溯法,递归遇到叶子节点(左右子树均为 null)则退回,遇到符合条件的,则构造字符串结果并且追加到字符串中。
/**
* 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<>();
buildPath(root, new ArrayList<>(), result);
return result;
}
private void buildPath(TreeNode node, List<Integer> res, List<String> result) {
res.add(node.val);
if (node.left == null && node.right == null) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < res.size(); i++) {
Integer path = res.get(i);
stringBuilder.append(path);
if (i < res.size() -1 ) {
stringBuilder.append("->");
}
}
result.add(stringBuilder.toString());
return;
}
if (node.left != null) {
buildPath(node.left, res, result);
res.remove(res.size() -1);
}
if (node.right != null) {
buildPath(node.right, res, result);
res.remove(res.size() -1);
}
}
}
复制代码
404. 左叶子之和
主要在于判断节点为左叶子节点,该类节点的特征为:是叶子节点,且是某个节点的左子节点。
package jjn.carl.binary_tree;
import commons.BinaryTreeHelper;
import commons.TreeNode;
import java.util.ArrayList;
import java.util.List;
/**
* @author Jiang Jining
* @since 2023-07-15 23:59
*/
public class LeetCode404 {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) {
return 0;
}
return dfs(root);
}
private int dfs(TreeNode node) {
int ans = 0;
if (node.left != null) {
ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);
}
if (node.right != null && !isLeafNode(node.right)) {
ans += dfs(node.right);
}
return ans;
}
private boolean isLeafNode(TreeNode node) {
return node != null && node.left == null && node.right == null;
}
public static void main(String[] args) {
// [3,9,20,null,null,15,7]
List<Integer> input = new ArrayList<>();
input.addAll(List.of(3, 9, 20));
input.add(null);
input.add(null);
input.addAll(List.of(15, 7));
TreeNode root = BinaryTreeHelper.buildTree(input);
int sumOfLeftLeaves = new LeetCode404().sumOfLeftLeaves(root);
System.out.println("sumOfLeftLeaves = " + sumOfLeftLeaves);
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/7183c5acb3d4a5eb63b855be7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.
评论