zoukankan      html  css  js  c++  java
  • 二叉平衡树

    题目描述:

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    基本知识:

    平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树。

    且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

     1 class Solution {
     2     int ldep = 0;
     3     int rdep = 0;
     4 public:
     5     int TreeDepth(TreeNode* pRoot){
     6         if(!pRoot) return 0 ;
     7             return max(1+TreeDepth(pRoot->left), 1+TreeDepth(pRoot->right));
     8     }
     9     bool IsBalanced_Solution(TreeNode* pRoot) {
    10         if(!pRoot)
    11             return true;
    12         ldep = TreeDepth(pRoot->left);
    13         rdep = TreeDepth(pRoot->right);
    14         if(ldep - rdep > 1 || rdep - ldep > 1)
    15             return false;
    16         else
    17         {
    18             IsBalanced_Solution(pRoot->left);
    19             IsBalanced_Solution(pRoot->right);
    20         }
    21         return true;
    22     }
    23 };

    小黑的代码:

    class Solution {
    public:
        int IsBalance(TreeNode* pRoot) {
            if(pRoot == NULL) return 0;
            int ldep = IsBalance(pRoot -> left);
            int rdep = IsBalance(pRoot -> right);
            
            if(abs(ldep - rdep) <= 1 && ldep != -1 && rdep != -1) {
                return max(1 + ldep, 1 + rdep);
            }
            else return -1;
        }
        
        bool IsBalanced_Solution(TreeNode* pRoot) {
            if(IsBalance(pRoot) == -1) return false;
            else return true;
        }
    };

     小黑的改进:

    class Solution {
    public:
        int IsBalance(TreeNode* pRoot) {
            if(pRoot == NULL) return 0;
            
            int ldep = IsBalance(pRoot -> left);
            if(ldep == -1) return -1;
            int rdep = IsBalance(pRoot -> right);
            if(rdep == -1) return -1;
            
            if(abs(ldep - rdep) <= 1 ) {
                return max(1 + ldep, 1 + rdep);
            }
            else return -1;
        }
        
        bool IsBalanced_Solution(TreeNode* pRoot) {
            if(IsBalance(pRoot) == -1) return false;
            else return true;
        }
    };
  • 相关阅读:
    Appium Android 元素定位方法 原生+H5
    Eclipse下Python的MySQLdb的安装以及相关问题
    Python模块包中__init__.py文件的作用
    如何调用另一个python文件中的代码
    Python单元测试框架unittest使用方法讲解
    python利用unittest进行测试用例执行的几种方式
    python随机生成手机号码
    eclipse 安装python后pydev不出现
    Appium 如何模拟返回按键
    python分布式进程
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8778751.html
Copyright © 2011-2022 走看看