This is one of the interview questions I recently came across.
Given the root address of a complete or almost complete binary tree, we have to write a function to c
Here's a working code for this problem.
package Test;
import static Test.BinaryTreeNode.swap;
public class TestImplementations {
public static void main(String args[]){
BinaryTreeNode root = new BinaryTreeNode(2,
new BinaryTreeNode(7,
new BinaryTreeNode(5,
new BinaryTreeNode(1),new BinaryTreeNode(6)),
new BinaryTreeNode(9,
new BinaryTreeNode(17))),
new BinaryTreeNode(3,
new BinaryTreeNode(11),new BinaryTreeNode(4))
);
System.out.println(root);
CustomHeap h = new CustomHeap();
h.minHeapify(root);
System.out.println(root);
}
}
class BinaryTreeNode {
private Integer value;
private BinaryTreeNode left;
private BinaryTreeNode right;
public BinaryTreeNode(Integer value){
this.value = value;
this.left = null;
this.right = null;
}
public BinaryTreeNode(Integer value, BinaryTreeNode left){
this.value = value;
this.left = left;
this.right = null;
}
public BinaryTreeNode(Integer value, BinaryTreeNode left, BinaryTreeNode right){
this.value = value;
this.left = left;
this.right = right;
}
public Integer getValue() {
return value;
}
public BinaryTreeNode getLeft() {
return left;
}
public BinaryTreeNode getRight() {
return right;
}
public static void swap(BinaryTreeNode r, BinaryTreeNode c){
Integer val = r.getValue();
r.value = c.getValue();
c.value = val;
}
}
class CustomHeap {
public void minHeapify(Test.BinaryTreeNode r){
if( r == null || (r.getLeft() == null && r.getRight() == null)){
return;
}
minHeapify(r.getLeft());
minHeapify(r.getRight());
if(isMin(r,r.getLeft())){
swap(r,r.getLeft());
minHeapify(r.getLeft());
}
if(r.getRight() !=null && isMin(r,r.getRight())){
swap(r,r.getRight());
minHeapify(r.getRight());
}
}
private Boolean isMin(Test.BinaryTreeNode r, Test.BinaryTreeNode c){
return c.getValue() < r.getValue() ? Boolean.TRUE : Boolean.FALSE;
}
}