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

1145. 二叉树着色游戏

时间:2023-04-06 22:35:10浏览次数:50  
标签:right TreeNode 1145 着色 二叉树 n2 n3 root left

题目链接:1145. 二叉树着色游戏

方法:分类

解题思路

(1)\(x\) 节点将二叉树分成了 \(3\) 部分,分别是父节点子树、左子树、右子树(节点数分别为 n1 n2 n3);
2023-02-03 11-51-40 创建的截图.png
(2)为了使得二号玩家染色尽可能的多,应该让 \(y\) 选择在 \(x\) 相邻的节点。若存在以下一种情况,则二号玩家稳赢,n1 > n2 + n3 + 1 || n2 > n1 + n3 + 1 || n3 > n1 + n2 + 1

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    TreeNode* player1_start;
public:
    void preorder(TreeNode* root, int x) {
        if (root->val == x) {
            player1_start = root;
            return ;
        }

        if (root->left != nullptr) preorder(root->left, x);
        if (root->right != nullptr) preorder(root->right, x);

        return ;
    }

    int levelorder(TreeNode* root) {
        int cnt = 0;
        queue<TreeNode*> q;
        q.push(root);
        cnt ++ ;
        while (!q.empty()) {
            TreeNode* front = q.front();
            q.pop();
            if (front->left != nullptr) {
                q.push(front->left);
                cnt ++ ;
            }
            if (front->right != nullptr) {
                q.push(front->right);
                cnt ++ ;
            }
        }

        return cnt;
    }

    bool btreeGameWinningMove(TreeNode* root, int n, int x) {
        preorder(root, x);
        int n1, n2, n3; 
        if (player1_start->left == nullptr) n2 = 0;
        else n2 = levelorder(player1_start->left);

        if (player1_start->right == nullptr) n3 = 0;
        else n3 = levelorder(player1_start->right);

        n1 = n - n2 - n3 - 1;

        if (n1 > n2 + n3 + 1 || n2 > n1 + n3 + 1 || n3 > n1 + n2 + 1) return true;
        else return false;
    }
};

标签:right,TreeNode,1145,着色,二叉树,n2,n3,root,left
From: https://www.cnblogs.com/lxycoding/p/17294453.html

相关文章

  • 257. 二叉树的所有路径
    给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。classSolution{private:voidtraversal(TreeNode*cur,stringpath,vector<string>&res){path+=std::to_string(cur->val);if(cur->left==nullptr&......
  • 树:剑指 Offer 68 - II. 二叉树的最近公共祖先
    题目描述:给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root= ......
  • 树:剑指 Offer 55 - II. 平衡二叉树
    题目描述:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例1:  示例2:  限制:0<=树的结点个数<=10000 方法基于以下性质推出: 此树的深度 等于 左子树的深度 与 ......
  • [LeetCode] 1339. Maximum Product of Splitted Binary Tree 分裂二叉树的最大乘积
    Giventhe root ofabinarytree,splitthebinarytreeintotwosubtreesbyremovingoneedgesuchthattheproductofthesumsofthesubtreesismaximized.Return themaximumproductofthesumsofthetwosubtrees.Sincetheanswermaybetoolarge,re......
  • 二叉树
         #include<bits/stdc++.h>usingnamespacestd;typedefstructTreeNode{ chardata; structTreeNode*LChild; structTreeNode*RChild;}Tree,LPTree;LPTree*creatNode(chardata);voidinsertNode(LPTree*parentNode,LPTree*LChild,LPTree......
  • 汉诺塔与二进制、满二叉树的千丝万缕
    汉诺塔(TowerofHanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。汉诺塔递归算法3......
  • 222. 完全二叉树的节点个数
    给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~2h个节点。classSolution{public:......
  • 111. 二叉树的最小深度
    给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。classSolution{public:intminDepth(TreeNode*root){if(root==nullptr)return0;if(!root->left&&!root->right......
  • 104.二叉树的最大深度
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],classSolution{public:intgetdepth(TreeNode*node){if(node==NULL)return0;......
  • 代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验
    654.最大二叉树题目链接:https://leetcode.cn/problems/maximum-binary-tree/基本的模拟思路很快/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:val)*this.left=(left===undefined......