Delete nodes and return lists of nodes


https://docs.google.com/document/d/1qxA2wps0IhVRWULulQ55W4SGPMu2AE5MkBB37h8Dr58/

17. N叉树,要求删一些node,返回list of roots 高频 8次

More Detail : 给一个tree有红的node有蓝的node,把红的去掉后剩下一堆零零散散的tree, 返回这些tree的node,只要node,不要children,也就是说把这个node的children设置成null然后加到list里
参数是这个树的root。找到所有的红点然后delete掉,去掉这些红点之后就会把一个tree变成散落的几个tree,然后返回这几个tree的root。直接一个recursive判断一下,如果这个node是红点的话就ignore 掉再去判断这个node的children,如果这个node是蓝点的话,要看这个蓝点的parent是不是个红点,是的话,这个蓝点就是散落的tree中其中一个tree的root。
思路:简单BFS。。不应是dfs?
想问一下这题返回的顺序重要吗?

没想到怎么做,有没有大佬写了code能发一下的?感激不尽
(Provider: fill your name)
  private void dfs(Node root, Node parent, List<Node> res) {
      if (root == null) {
          return;
      }
      if ((parent == null || parent.color == red) && root.color != red) {
          res.add(root);
      }
      for (Node children : root.children) {
          dfs(child, root, res);
      }
  }
public void dfsHelp (Node root, List<Node> res) {
if (root == null) {
return;
}
if (root.isRed) {
for (Node child:root.childrens) {
if (!child.isRed) {
res.add(child);
}
dfsHelp(child, res);
}
} else {
res.add(root);
这个地方感觉写错了呀,blue1的孩子blue2如果也是颜色blue,不应该把blue2也加进去的,加不加要根据parent判断吧

Iterator<Node> it = root.childrens.iterator();
while (it.hasNext()) {
Node child = it.next();
if (child.isRed) {
root.childrens.remove(child);
}
dfsHelp(child, res);
}
}
}

class TreeNode(object):
  def __init__(self, val, color):
      self.val = val
      self.color = color
      self.children = []

class Solution(object):
  def listOfRoots(self, root):
      if not root: return []

      ans = []

      def dfs(node, parent):
          if not node: return
          if node.color == 'b':
              if parent.color == 'r': ans.append(node.val)
// should check if parent is None
              else: ans.append(-1)//这里加上负一是为什么?

          for child in node.children:
              dfs(child, node)

      dfs(root, None)
      return ans


删除node返回森林


第一轮是给一个二叉树,然后再给一个list的TreeNode,这个list里的TreeNode是肯定在二叉树里的,然后要把这些TreeNode删除,最后返回一个原二叉树删除这些TreeNode后得到的Forest
举个例子,如果二叉树如下:
       A
      / \
   [B]  C
   / \     \
 D  E [F]
方括号内的TreeNode是要删除的,最后返回的Forest是[A, D, E]。
这道题我用recursion做的,输入参数一个是TreeNode,一个是它的parent是不是被删除的boolean。然后要我给出不同的test case


思路:
简单的dfs
如果当前节点需要被删除,递归进入它的左右子树得到左右子树被删除节点后的新树,如果不为null则加入list,然后由于当前节点被删除了,返回null
如果当前节点不需要被删除,左右子树递归,然后返回当前节点


code:
Provider: null
public TreeNode dfsUtil(TreeNode root, Set<TreeNode> deleted, List<TreeNode> res) {
if(root == null) return null;
if(deleted.contains(root)) {
TreeNode left = dfsUtil(root.left, deleted, res);
TreeNode right = dfsUtil(root.right, deleted, res);
if(left != null) res.add(left);
if(right != null) res.add(right);
return null;
} else {
root.left = dfsUtil(root.left, deleted, res);
root.right = dfsUtil(root.right, deleted, res);
return root;
}

}

根节点漏掉了,拿上面的例子来说,A节点最后没被放到结果中去

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