Learn-dsa..in 30 days!



























CC-20 : Convert Binary Search Tree to Heap.

Description:

Given Binary Tree as input, convert the same into a Heap.

Test cases and expected outputs:

Input Parameters Expected outputs
BST to Heap :
26,30,33,42,46,51,61

Pseudocode:

Call method ConvertBSTToHeap() with root node of Binary Search Tree to convert it to Heap. Then call postOrderRecursive() with root node and ArrayList to get the output Heap structure.

Method ConvertBSTToHeap (BinTreeNode root):

Initialize ArrayList named al.
Call method inOrderRecursive() with root and al as arguments.
Initialize idx= {-1}.
Call InOrderToMaxHeap() with root, al and idx as arguments.

Method inOrderRecursive(parentNode, ArrayList):

If parentNode is null, return.
Call inOrderRecursive() with parent node’s left child as parameter.
Add parent node’s node data to In-order traversal ArrayList.
Call inOrderRecursive() with parent node’s right child as parameter.

Method InOrderToMaxHeap(parentNode, ArrayList, Int):

Recursively call InOrderToMaxHeap() with parentNode.leftChild, al and idx as arguments.
Recursively call InOrderToMaxHeap() with parentNode.rightChild, al and idx as arguments. parentNode.setNodeData(al.get(++idx[0])).

Method postOrderRecursive(parentNode, ArrayList):

If parentNode is null, return.
Call postOrderRecursive() with parent node’s left child as parameter.
Call postOrderRecursive() with parent node’s right child as parameter.
Add parent node’s node data to Post-order traversal ArrayList.

Code:

public class HeapConvertBSTToHeap {
 
public void inOrderRecursive(BinTreeNode parent, ArrayList<Integer> al){
	if (parent==null) {return;}
	inOrderRecursive(parent.getLeftChild(),al);
	al.add(parent.getNodeData());
	inOrderRecursive(parent.getRightChild(),al);
}

public void InOrderToMaxHeap(BinTreeNode parent, ArrayList<Integer> al, int[] idx) {
	if (parent==null) {return;}
	InOrderToMaxHeap(parent.getLeftChild(), al, idx);
	InOrderToMaxHeap(parent.getRightChild(), al, idx);
	parent.setNodeData(al.get(++idx[0]));
}

public void ConvertBSTToHeap(BinTreeNode root) {
	ArrayList<Integer> al=new ArrayList<Integer>();
	inOrderRecursive(root,al);
	int[] idx= {-1};
	InOrderToMaxHeap(root,al, idx);	
}

public void postOrderRecursive(BinTreeNode parent, ArrayList<Integer> al ) throws Exception{
	if (parent==null) {return;}
	postOrderRecursive(parent.getLeftChild(), al);
	postOrderRecursive(parent.getRightChild(), al);
	al.add(parent.getNodeData());
}
}

Click here to download and run code and test cases !