/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
public class Main {
TreeNode<Integer> root = createTree();
printTree(root);
System.
out.
println("overwritten: " + overwriteall
(root,
7,
10)); printTree(root);
}
public static TreeNode<Integer> createTree() {
TreeNode<Integer> root = new TreeNode<Integer>(1);
root.left = new TreeNode<Integer>(2);
root.left.left = new TreeNode<Integer>(3);
root.left.right = new TreeNode<Integer>(4);
root.right = new TreeNode<Integer>(7);
root.right.left = new TreeNode<Integer>(7);
root.right.right = new TreeNode<Integer>(7);
return root;
}
public static <T> void printTree(TreeNode<T> root) {
// base case
if(root == null) { return; }
// in order traversal
printTree(root.left);
printTree(root.right);
}
public static <T> boolean overwriteall(TreeNode<T> root, T find, T replace) {
// base case
if(root == null) { return false; }
// pre order traversal
boolean found = false;
if(root.key.equals(find)) {
found = true;
root.key = replace;
}
// you cannot use || since that will short circuit
// and therefore the right part of the tree will not be processed
// if their is an element on the left part already
return found | overwriteall(root.left, find, replace) | overwriteall(root.right, find, replace);
}
public static class TreeNode<T> {
public T key;
public TreeNode<T> left;
public TreeNode<T> right;
this.key = key;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpwdWJsaWMgY2xhc3MgTWFpbiB7CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJVHJlZU5vZGU8SW50ZWdlcj4gcm9vdCA9IGNyZWF0ZVRyZWUoKTsKCQlwcmludFRyZWUocm9vdCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJvdmVyd3JpdHRlbjogIiArIG92ZXJ3cml0ZWFsbChyb290LCA3LCAxMCkpOwoJCXByaW50VHJlZShyb290KTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCX0KCQoJcHVibGljIHN0YXRpYyBUcmVlTm9kZTxJbnRlZ2VyPiBjcmVhdGVUcmVlKCkgewoJCVRyZWVOb2RlPEludGVnZXI+IHJvb3QgPSBuZXcgVHJlZU5vZGU8SW50ZWdlcj4oMSk7CgkJCgkJcm9vdC5sZWZ0ID0gbmV3IFRyZWVOb2RlPEludGVnZXI+KDIpOwoJCXJvb3QubGVmdC5sZWZ0ID0gbmV3IFRyZWVOb2RlPEludGVnZXI+KDMpOwoJCXJvb3QubGVmdC5yaWdodCA9IG5ldyBUcmVlTm9kZTxJbnRlZ2VyPig0KTsKCQkKCQlyb290LnJpZ2h0ID0gbmV3IFRyZWVOb2RlPEludGVnZXI+KDcpOwoJCXJvb3QucmlnaHQubGVmdCA9IG5ldyBUcmVlTm9kZTxJbnRlZ2VyPig3KTsKCQlyb290LnJpZ2h0LnJpZ2h0ID0gbmV3IFRyZWVOb2RlPEludGVnZXI+KDcpOwoJCQoJCXJldHVybiByb290OwoJCQoJfQoJCglwdWJsaWMgc3RhdGljIDxUPiB2b2lkIHByaW50VHJlZShUcmVlTm9kZTxUPiByb290KSB7CgkJCgkJLy8gYmFzZSBjYXNlCgkJaWYocm9vdCA9PSBudWxsKSB7IHJldHVybjsgfQoJCQoJCS8vIGluIG9yZGVyIHRyYXZlcnNhbAoJCXByaW50VHJlZShyb290LmxlZnQpOwoJCQoJCVN5c3RlbS5vdXQucHJpbnQocm9vdC5rZXkpOwoJCVN5c3RlbS5vdXQucHJpbnQoJyAnKTsKCQkKCQlwcmludFRyZWUocm9vdC5yaWdodCk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gb3ZlcndyaXRlYWxsKFRyZWVOb2RlPFQ+IHJvb3QsIFQgZmluZCwgVCByZXBsYWNlKSB7CgkJLy8gYmFzZSBjYXNlCgkJaWYocm9vdCA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfQoJCQoJCS8vIHByZSBvcmRlciB0cmF2ZXJzYWwKCQlib29sZWFuIGZvdW5kID0gZmFsc2U7CgkJaWYocm9vdC5rZXkuZXF1YWxzKGZpbmQpKSB7IAoJCQlmb3VuZCA9IHRydWU7IAoJCQlyb290LmtleSA9IHJlcGxhY2U7CgkJfQoJCQoJCS8vIHlvdSBjYW5ub3QgdXNlIHx8IHNpbmNlIHRoYXQgd2lsbCBzaG9ydCBjaXJjdWl0CgkJLy8gYW5kIHRoZXJlZm9yZSB0aGUgcmlnaHQgcGFydCBvZiB0aGUgdHJlZSB3aWxsIG5vdCBiZSBwcm9jZXNzZWQKCQkvLyBpZiB0aGVpciBpcyBhbiBlbGVtZW50IG9uIHRoZSBsZWZ0IHBhcnQgYWxyZWFkeQoJCXJldHVybiBmb3VuZCB8IG92ZXJ3cml0ZWFsbChyb290LmxlZnQsIGZpbmQsIHJlcGxhY2UpIHwgb3ZlcndyaXRlYWxsKHJvb3QucmlnaHQsIGZpbmQsIHJlcGxhY2UpOwoJfQoJCglwdWJsaWMgc3RhdGljIGNsYXNzIFRyZWVOb2RlPFQ+IHsKCQlwdWJsaWMgVCBrZXk7CgkJcHVibGljIFRyZWVOb2RlPFQ+IGxlZnQ7CgkJcHVibGljIFRyZWVOb2RlPFQ+IHJpZ2h0OwoJCQoJCXB1YmxpYyBUcmVlTm9kZShUIGtleSkgeyAKCQkJdGhpcy5rZXkgPSBrZXk7CgkJfQoJfQp9