首页 > 其他分享 >1145.二叉树着色游戏

1145.二叉树着色游戏

时间:2023-06-13 16:58:09浏览次数:46  
标签:return 1145 int get 着色 num 二叉树 root 节点

问题描述

1145.二叉树着色游戏

解题思路

贪心策略:对二号玩家来说,想要取胜,选择染色节点只有三种可能:

  • 选择x的父节点,则通过深度优先搜索可以求得红色节点数,蓝色节点数为$n$减去红色节点数
  • 选择x的左子节点,则通过dfs可以求得蓝色节点数,红色节点数为$n$减去蓝色节点数
  • 选择x的右子节点

代码

class Solution {
  public:
    int get_num(TreeNode *root) { // 获取当前树的节点数
        if (root != nullptr)
            return get_num(root->left) + get_num(root->right) + 1;
        else
            return 0;
    }
    TreeNode *get_pos(int x, int n, TreeNode *root) { // 获取当前x对应的指针
        if (root == nullptr)
            return nullptr;
        else {
            if (root->val == x)
                return root;
            else {
                TreeNode *l = get_pos(x, n, root->left);
                TreeNode *r = get_pos(x, n, root->right);
                if (l != nullptr)
                    return l;
                else
                    return r;
            }
        }
    }
    bool btreeGameWinningMove(TreeNode *root, int n, int x) {
        // 先判断是不是完全树
        if (n == 1)
            return false;
        TreeNode *nodex = get_pos(x, n, root);
        int num_blue1 = n - get_num(nodex); // 表示占据父节点
        int num_blue2 = get_num(nodex->left);
        int num_blue3 = get_num(nodex->right);
        if (num_blue1 > n - num_blue1)
            return true;
        if (num_blue2 > n - num_blue2)
            return true;
        if (num_blue3 > n - num_blue3)
            return true;
        return false;
    }
};

标签:return,1145,int,get,着色,num,二叉树,root,节点
From: https://www.cnblogs.com/zwyyy456/p/17478102.html

相关文章

  • leetcode 104. 二叉树的最大深度(java实现)
    104.二叉树的最大深度标题解法标题给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。解法publicclassSolution{publicintmaxDepth(TreeNoderoot){//如果节点为空,返回深度为0......
  • 二叉树看递归问题(下)
    112. 路径总和112.路径总和-力扣(Leetcode)给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子......
  • OSG 使用整理(4):使用普通纹理着色
    osg中使用普通纹理着色1.1  普通纹理osg::Image类存储OpenGL纹理对象载入与使用的图像数据,其中方法data()将原始图像数据作为uchar*指针返回,可以直接修改内存中数据,方法getPixelFormat方法返回像素格式,getDataType返回每个像素通道数据类型,方法allocateImage为图片预先分配......
  • 【技术积累】数据结构中的二叉树【一】
    什么是二叉树二叉树是一种树形数据结构,由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。在二叉树中,每个节点的左子节点小于该节点的值,在该节点的右侧的子节点大于该节点的值。二叉树的特点是易于搜索、插入和删除操作。在搜索时,从根节点开始,如果被查找值等于......
  • 二叉树的相关操作
    一.二叉树本文的数据结构基于C语言练习。C语言中的二叉树是一种数据结构,用于表示具有层次关系的数据集合。它由一个根节点开始,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树有许多相关性质,其中一些重要的包括:深度:指从根节点到某个节点的路径长度。树的深度等于所有......
  • 二叉树
    给定二叉树结点的前序序列和中序序列,可以唯一确定该二叉树。因为前序序列的第一个元素是根结点,该元素将二叉树中序序列分成两部分,左边(设l个元素)表示左子树,若左边无元素,则说明左子树为空;右边(设r个元素)是右子树,若为空,则右子树为空。根据前序遍历中“根—左子树—右子树”......
  • 二叉树先序遍历算法的步骤
    //创建二叉树类型的结构体 //创建显得树节点并赋值并将该节点的左子树指针域和右子树指针域分别赋为NULL; //创建一个函数用于遍历二叉树并打印节点的值 //主函数将并将指针分别指向新的树节点  //执行遍历打印二叉树的节点的值 ......
  • 平衡二叉树
     1、平衡二叉树(AVL):它或者是一颗空树,左子树和右子树的深度之差不超过,且他的左子树和右子树都是一颗平衡二叉树2、平衡二叉树出现的原因:平衡二叉树就是在二叉排序树(BST)引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,AVL就保持住了BST的最好时间复杂度O(logn),所以每......
  • 初级数据结构--二叉树
    二叉树节点:树中的元素终端节点:分支数为0的节点有序树、无序树:节点左右排列顺序不得互换叫有序,反之为无序普通二叉树排序二叉树二叉顺序表定义和初始化typedefstructData{ intval;}Data;typedefstructTree{ Datadata; structTree*lbranch; structTree*rbranch;}T......
  • 代码随想录算法训练营第十七天|● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
    110.平衡二叉树力扣题目链接(opensnewwindow)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例1:给定二叉树[3,9,20,null,null,15,7]返回true。示例2:给定二叉树[1,2,2,3,3,nu......