剑指offer-39.平衡二叉树

来源:互联网 发布:js获取android版本号 编辑:程序博客网 时间:2024/05/18 02:03

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


思路:首先求出深度,然后进行深度比较,求深度需要求二叉树深度函数,然后再调用深度函数,最后比较深度差。


class Solution {public:    //需要一个求二叉树深度的函数进行辅助,因为平衡二叉树的定义    //1.是它是一 棵空树或    //2.它的左右两个子树的高度差的绝对值不超过1,    //3.并且左右两个子树都是一棵平衡二叉树。    int tree_depth(TreeNode* t)    {        if (t == NULL)            return 0;        int left = tree_depth(t->left);        int right = tree_depth(t->right);        return (left > right ? left + 1: right + 1); //左子树深度加一或者右子树深度加一,因为还有根节点    }    bool IsBalanced_Solution(TreeNode* pRoot)     {        if (pRoot == NULL)            return true; //1.它是一 棵空树        int left_depth = tree_depth(pRoot->left);        int right_depth =  tree_depth(pRoot->right);        int diff = left_depth - right_depth;        if (diff > 1 || diff < -1)            return false;        else   //2.3.第二第三次情况,其实我试了一次啊,else直接返回true结果也对,不过感觉不是很严谨,               //所以else返回判断左子树和右子树是否也为平衡树(第三种情况),直接返回true只是第二种情况,               //也不太很确定自己的想法是否正确,欢迎指正            return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));    }};


0 0
原创粉丝点击