12.判斷一棵二叉樹是否是平衡二叉樹(JavaScript版)


判斷一棵二叉樹是否是平衡二叉樹:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //二叉平衡搜索樹:
        //1.根節點的左子樹與右子樹的高度差不能超過1
        //2.這棵二叉樹的每個子樹都符合第一條

        function Node(value){
            this.value = value;
            this.left = null;
            this.right = null;
        }

        var nodeA = new Node("a");
        var nodeB = new Node("b");
        var nodeC = new Node("c");
        var nodeD = new Node("d");
        var nodeE = new Node("e");
        var nodeF = new Node("f");
        var nodeG = new Node("g");

        nodeA.left = nodeB;
        nodeA.right = nodeC;
        nodeB.left = nodeD;
        nodeB.right = nodeE;
        nodeC.left = nodeF;
        nodeC.right = nodeG;

        //判斷二叉樹是否平衡
        function isBalance(root){
            if(root == null) return true;
            //獲取左右的深度
            var leftDeep = getDeep(root.left);
            var rightDeep = getDeep(root.right);
            //若左右深度相差大於1,則不是平衡樹
            if(Math.abs(leftDeep - rightDeep) > 1){
                return false;
            }else{
                //判斷左右子樹是否平衡
                return isBalance(root.left) && isBalance(root.right);
            }
        }

        //獲取樹的深度
        function getDeep(root){
            if(root == null) return 0;
            var leftDeep = getDeep(root.left);
            var rightDeep = getDeep(root.right);
            return Math.max(leftDeep, rightDeep) + 1;//取兩個深度中最大的一個,加上自身
        }

        console.log(isBalance(nodeA));
    </script>
</body>
</html>
判斷平衡二叉樹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM