平衡二叉树

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
 
 
 
 
提交链接:点击
 
 
 
 
思路:
  方法一:首先根据平衡二叉树的定义,要么为空树,要么它的左右子树高度相差小于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;
    }
};
原文地址:https://www.cnblogs.com/logo-88/p/9863968.html