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

    题目描述

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。
     
     
     
     
    提交链接:点击
     
     
     
     
    思路:
      方法一:首先根据平衡二叉树的定义,要么为空树,要么它的左右子树高度相差小于1且左右子树也为平衡二叉树。于是肯定需要的是计算该树的高度,很容易的递归求解树的高度。对左右子树分别求解高度,如果不大于1,则返回是平衡二叉树,否则,不是平衡二叉树。这是最容易想到的办法,不足的是针对每个结点都进行递归求解高度,复杂度高些。
     
       方法二:在递归求解树的高度的过程中,判断左右子树的高度相差是否小于1,如果大于,直接返回不是平衡二叉树。可以有剪纸的操作。
     
     
    代码:
    class Solution {
    public:
        bool IsBalanced_Solution(TreeNode* pRoot) {
            //要么是空树,要么左右子树高度小于1,左右子树分别为平衡二叉树
            if(!pRoot) return true;
            int left=TreeDepth(pRoot->left);
            int right=TreeDepth(pRoot->right);
            if(abs(left-right)>1) return false;
            return true;
        }
        int TreeDepth(TreeNode *pRoot){
            if(!pRoot) return 0;
            int left=TreeDepth(pRoot->left);
            int right=TreeDepth(pRoot->right);
            return left>right?left+1:right+1;
        }
    };
  • 相关阅读:
    Centos7下rc.local文件开机不执行…
    Centos7添加密码安全策略
    Java8 时间日期类操作
    XML配置spring session jdbc实现session共享
    Spring Boot 2.x以后static下面的静态资源被拦截
    外观模式
    组合设计模式
    Java线程池源码解析
    观察者模式
    Java使用POI解析Excel表格
  • 原文地址:https://www.cnblogs.com/logo-88/p/9863968.html
Copyright © 2011-2022 走看看