日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1145. 二叉树着色游戏(计算节点个数)

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1145. 二叉树着色游戏(计算节点个数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

有兩位極客玩家參與了一場「二叉樹著色」的游戲。游戲中,給出二叉樹的根節點 root,樹上總共有 n 個節點,且 n 為奇數,其中每個節點上的值從 1 到 n 各不相同。

游戲從「一號」玩家開始(「一號」玩家為紅色,「二號」玩家為藍色),最開始時,

  • 「一號」玩家從 [1, n] 中取一個值 x(1 <= x <= n);

  • 「二號」玩家也從 [1, n] 中取一個值 y(1 <= y <= n)且 y != x。

  • 「一號」玩家給值為 x 的節點染上紅色,而「二號」玩家給值為 y 的節點染上藍色。

之后兩位玩家輪流進行操作,每一回合,玩家選擇一個他之前涂好顏色的節點,將所選節點一個 未著色鄰節點(即左右子節點、或父節點)進行染色。

如果當前玩家無法找到這樣的節點來染色時,他的回合就會被跳過。

若兩個玩家都沒有可以染色的節點時,游戲結束。著色節點最多的那位玩家獲得勝利 ??。

現在,假設你是「二號」玩家,根據所給出的輸入,假如存在一個 y 值可以確保你贏得這場游戲,則返回 true;若無法獲勝,就請返回 false。

輸入:root = [1,2,3,4,5,6,7,8,9,10,11], n = 11, x = 3 輸出:True 解釋:第二個玩家可以選擇值為 2 的節點。提示: 二叉樹的根節點為 root,樹上由 n 個節點,節點上的值從 1 到 n 各不相同。 n 為奇數。 1 <= x <= n <= 100

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-tree-coloring-game
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 計算節點個數

  • 節點x相鄰的3側(左子,右子,父側)各有多少節點?
  • 二號玩家只能選擇上面最多的一側進行涂色(鄰接著x涂的最多)
class Solution {TreeNode *nodeX = NULL;int X; public:bool btreeGameWinningMove(TreeNode* root, int n, int x) { X = x;int count = 0, numOfLeft = 0, numOfRight = 0, remaining, maxNodes;preOrder(root,count);//獲取x對應的節點地址preOrder(nodeX->left,numOfLeft);//獲取x左子的總數preOrder(nodeX->right,numOfRight);//獲取右子的總數remaining = n-1-numOfLeft-numOfRight;//剩余的父側總節點數maxNodes = max(remaining,max(numOfRight,numOfLeft));//最多的一側return maxNodes > n-maxNodes;//最多的一側能贏嗎?}void preOrder(TreeNode* root, int &num){if(root == NULL)return;if(root->val == X)nodeX = root;num++;preOrder(root->left,num);preOrder(root->right,num);} };

總結

以上是生活随笔為你收集整理的LeetCode 1145. 二叉树着色游戏(计算节点个数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。