Conquer on Tree (二叉树上的占领游戏) - 1point3acres


二叉树上的占领游戏
在一棵二叉树上玩一个游戏,对手先选择树上一个节点,现在该由你来选择一个点。然后同时开始,从选择的那个点开始,
向外扩张,只可以去占领其相邻的点(parent and children),然后从占领的点再去扩张,依次类推,
但如果相邻的点已经被对方占了,就没法去占领了。谁最终占有的点最多谁获胜。

input是树root和对手选中的node,返回你是否能胜利

followup 如果你先选择点,你该选择哪个点能胜利?

比如下面这个树,如果你的对手选中了8,你选6就能胜利。而如果你选9,对手下一步可以由8扩张到6,对手就赢了。
        1
    2       3
  4   5       6
7           8   9
          10      11
            12  13
          14      15
https://www.1point3acres.com/bbs ... read&tid=488670
嗯,找到一个结点,使以该结点为根的新树的左右子树结点数目相等或者相差不大于1。那么先手选此结点必然不败;如果新树左右子树结点数目相等则先手胜,否则先手平。

不是一次。turn-based选。比如楼上的树,我选1,你选3。因为规则是必须从占领的点相邻的扩张。我占领的点是【1】。而3你又占着,所以我只能选2来扩张.

你选了某个点i,那么对方肯定选跟i相临的某个点。
所以对方就是选了以点i为root,权值和最大的一个subtree。
先选的一方肯定是不败的。

红蓝小人占领二叉树 (频率 5)

两个人红蓝,在二叉树上,每个人可以从第一个选的点开始同时往相邻的点扩展占领点,已知red选了一个点,(规则大概是两点之间的可以共同占领,但红的children只能红的占)问蓝第一个点选哪里最后能占领的最多。输入root和红的点,输出蓝色选的node
请问这题可以有哪位好心的童鞋再解释一下题目的意思吗?“规则大概是两点之间的可以共同占领,但红的children只能红的占” 这里看不懂😔
例子:(N: 空node, r: 红色点,b蓝色点)
n
/ \
n n
n r n n
n n n n  n n n n
如果蓝色小人在红色小人上方作为起点,标红点node现在对于蓝色小人来说永远不可占领,其他节点两人可以轮流扩展占领
此处b选在蓝色节点处为最佳策略,蓝色小人堵住了红色小人向上扩展的机会
思路:
这个题关键在于明白规则:
即出了第一个点,其余的点放的时候都要连接到相同颜色的点, 所以红色选定后,就把树分为了三部分,如果蓝色选的是最大的一部分并且紧挨着红色第一个点,就有可能赢。 因为最大的一部分被蓝色堵住后, 红色都到不了了

选第一个点的的时候,要选一个三部分尽量均匀的,即 任何两部分都大于第三部分的,即红色先选并选第一个点的规则, 这个是follow up

参考代码
Provider: null
TreeNode {
int key;
TreeNode left;
TreeNode right;
public TreeNode(int key) {this.key = key;}
}
private TreeNode redParent = null;
private TreeNode red = null;
public TreeNode findNode(TreeNode root, TreeNode red) {
// sanity check
this.red = red;
int redL = countNode(red.left);
int redR = countNode(red.right);
int redParent = countNode(root);
int max = Math.max(redParent, Math.max(redL, redR));
if(max == redL) return red.left;
else if(max == redR) return red.right;
else return redParent;
}
private int countNode(TreeNode root) {
if(root.left == red || root.right == red) redParent = root;
if(root == null || root == red) return 0;
return countNode(root.left) + 1 + countNode(root.right);
}


Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts