Комментарии:
FIRST!
ОтветитьSECOND!!
ОтветитьTHIRD
ОтветитьFourth
Ответитьfifth
ОтветитьSixty Nine!
ОтветитьThank you so much for the daily problems.
ОтветитьIs there any reason why would we use bfs in this case?
ОтветитьThank you!
ОтветитьAyo the thumbnail😂
ОтветитьThank You 🍃
Ответить420 everyday
Ответить420 everyday
ОтветитьDunno why is it medium. Pretty straightforward solution.
ОтветитьAccepted Java Iterative Solution using map and stack:
class Solution {
public TreeNode removeLeafNodes(TreeNode root, int target) {
Map<TreeNode, TreeNode> parentMap = new HashMap();
Stack<TreeNode> stk = new Stack();
stk.push(root);
while (!stk.isEmpty()) {
TreeNode node = stk.pop();
if (node.right == null && node.left == null && node.val == target) { // delete this node
TreeNode parent = parentMap.get(node);
if (parent != null && parent.right == node) { // update parent right pointer to null
parentMap.remove(node);
parent.right = null;
}
if (parent != null && parent.left == node) { // update parent left pointer to null
parentMap.remove(node);
parent.left = null;
}
} else {
boolean added = false;
if (node.right != null && !parentMap.containsKey(node.right)) {
added = true;
stk.push(node); // add back current node to stack
stk.push(node.right);
parentMap.put(node.right, node);
}
if (node.left != null && !parentMap.containsKey(node.left)) {
if (!added) {
stk.push(node); // if not added ealier then add back
}
stk.push(node.left);
parentMap.put(node.left, node);
}
}
}
//if root only is pending and having value == target
if (root.left == null && root.right == null && root.val == target) {
return null;
}
return root;
}
}
honestly I doubt we will ever have chance to implement tree traversal with iterative approach...
thanks for the explanation
Yes, The leaf node check should be done post order (not pre order) -- so that it will reach till parent
Ответить