代码随想录 Day17 - 二叉树(四)

简介: 代码随想录 Day17 - 二叉树(四)

作业题


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



目录
相关文章
|
2月前
代码随想录——双指针(一)
代码随想录——双指针(一)
代码随想录 Day21 - 二叉树(七)
代码随想录 Day21 - 二叉树(七)
29 0
|
3月前
|
算法
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
43 0
代码随想录 Day14 - 二叉树(一)
代码随想录 Day14 - 二叉树(一)
45 1
代码随想录 Day22 - 二叉树(八)
代码随想录 Day22 - 二叉树(八)
38 0
代码随想录 Day15 - 二叉树(二)
代码随想录 Day15 - 二叉树(二)
31 0
代码随想录 Day18 - 二叉树(五)
代码随想录 Day18 - 二叉树(五)
44 0
代码随想录 Day16 - 二叉树(三)
代码随想录 Day16 - 二叉树(三)
35 0
代码随想录 Day20 - 二叉树(六)
代码随想录 Day20 - 二叉树(六)
40 0
代码随想录 Day23 - 二叉树(九)
代码随想录 Day23 - 二叉树(九)
39 0