您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页力扣-数据结构-15【算法学习day.86】

力扣-数据结构-15【算法学习day.86】

来源:华拓科技网

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

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 {
    int[] flag;
    int sonl = 0;
    int sonr = 0;
    int x;
    public boolean btreeGameWinningMove(TreeNode root, int n, int x) {
        this.x = x;
        flag = new int[n+1];
        if(x==root.val){
            int l = recursion(root.left);
            int r = recursion(root.right);
            return l==r?false:true;
        }else{
            int sum = recursion(root);
            if(sonl!=0&&sonr!=0){
                int l = flag[sonl];
                int r = flag[sonr];
                if((sum-l)<l||(sum-r)<r){
                return true;
            }
        }
            int re = sum - flag[x];
            return re>flag[x]?true:false;
        }
    }
    public int recursion(TreeNode node){
        if(node==null)return 0;
        int l = recursion(node.left);
        int r = recursion(node.right);
        flag[node.val] = l+r+1;
        if(node.val==x&&node.left!=null&&node.right!=null){
            sonl = node.left.val;
            sonr = node.right.val;
        }
        return l+r+1;
    }
}

2.好叶子节点对的数量

题目链接: 

题面:

附上大佬代码:

class Solution {
    int pairs = 0;

    public int countPairs(TreeNode root, int distance) {
        getDistances(root, distance);
        return pairs;
    }

    public List<Integer> getDistances(TreeNode node, int distance) {
        List<Integer> distances = new ArrayList<Integer>();
        if (node == null) {
            return distances;
        }
        if (node.left == null && node.right == null) {
            distances.add(0);
            return distances;
        }
        List<Integer> leftDistances = getDistances(node.left, distance);
        List<Integer> rightDistances = getDistances(node.right, distance);
        int leftSize = leftDistances.size();
        int rightSize = rightDistances.size();
        for (int i = 0; i < leftSize; i++) {
            int leftDistance = leftDistances.get(i) + 1;
            leftDistances.set(i, leftDistance);
            if (leftDistance <= distance) {
                distances.add(leftDistance);
            }
        }
        for (int i = 0; i < rightSize; i++) {
            int rightDistance = rightDistances.get(i) + 1;
            rightDistances.set(i, rightDistance);
            if (rightDistance <= distance) {
                distances.add(rightDistance);
            }
        }
        for (int leftDistance : leftDistances) {
            for (int rightDistance : rightDistances) {
                if (leftDistance + rightDistance <= distance) {
                    pairs++;
                }
            }
        }
        return distances;
    }
}

后言

上面是相关的习题,下一篇文章会将其他相关的习题。

 

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务