Files
chaomt fbe8dcdf6b fix(guide): binary search tree min/max height (#35938)
We added the correct solution to the guide article related to this code challenge, and deleted the other information which is not related to the code challenge at all.
2019-04-30 13:16:17 +05:30

2.3 KiB

title
title
Find the Minimum and Maximum Height of a Binary Search Tree

Find the Minimum and Maximum Height of a Binary Search Tree

Solution

var displayTree = (tree) => console.log(JSON.stringify(tree, null, 2));
function Node(value) {
    this.value = value;
    this.left = null;
    this.right = null;
}
function BinarySearchTree() {
    this.root = null;
    // change code below this line
    // change code above this line
    this.findMinHeight = function(root = this.root) {
        // empty tree.
        if(root === null) {
            return -1;
        }
        // leaf node.
        if(root.left === null && root.right === null) {
            return 0;
        }
        if(root.left === null){
            return this.findMinHeight(root.right) + 1;
        }
        if(root.right === null){
            return this.findMinHeight(root.left) + 1;
        }
        const lHeight = this.findMinHeight(root.left);
        const rHeight = this.findMinHeight(root.right);
        return Math.min(lHeight, rHeight) + 1;
    };
    this.findMaxHeight = function(root = this.root) {
        // empty tree.
        if(root === null) {
            return -1;
        }
        // leaf node.
        if(root.left === null && root.right === null) {
            return 0;
        }
        if(root.left === null){
            return this.findMaxHeight(root.right) + 1;
        }
        if(root.right === null){
            return this.findMaxHeight(root.left) + 1;
        }
        const lHeight = this.findMaxHeight(root.left);
        const rHeight = this.findMaxHeight(root.right);
        return Math.max(lHeight, rHeight) + 1;
    };
    this.isBalanced = function(root = this.root) {

        if(root === null) {
            return true;
        }

        if(root.left === null && root.right === null){
            return true;
        }

        if(root.left === null) {
            return this.findMaxHeight(root.right) <= 0; 
        }

        if(root.right === null) {
             return this.findMaxHeight(root.left) <= 0; 
        }

        const lHeight = this.findMaxHeight(root.left);
        const rHeight = this.findMaxHeight(root.right);
        if(Math.abs(lHeight - rHeight) > 1){
            return false;
        }
        return this.isBalanced(root.left) && this.isBalanced(root.right);
    };
}