Max-Heapify A Binary Tree

后端 未结 4 517
半阙折子戏
半阙折子戏 2020-12-31 11:43

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

4条回答
  •  清酒与你
    2020-12-31 11:48

    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;
        }
    }
    

提交回复
热议问题