写点什么

代码随想录 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
用户头像

jjn0703

关注

Java工程师/终身学习者 2018-03-26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
代码随想录 Day17 - 二叉树(四)_jjn0703_InfoQ写作社区