!!!题解 | 判断是不是平衡二叉树 写代码之前要多想 注意递归函数的返回值有重要作用

判断是不是平衡二叉树

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <algorithm>
#include <cmath>
#include <ios>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return bool布尔型
     */
    bool IsBalanced_Solution(TreeNode* pRoot) {
        // write code here
        //求任意节点的高度
        //求任意节点的高度也并不是从顶到下或者是从上到顶都可以的,只能是从下到上传递.因为从顶到上根本无法判断这棵树是不是平衡二叉树
        //那么应该怎么从上从下到上的高度呢,当前节点的高度是多少呢,它的高度应该是左节点和右节点其中的最大的高度加一
        //函数应该怎么写呢,分析到这儿应该可以知道应该传递的是当前结点的高度,那么就需要一个int类型。可是它还需要表示当前节点是否是平衡二叉树,没问题,这也可以使用int,因为高度肯定大于零,所以他只要选一个负数比如负一,就代表他不符合平衡二叉树,可以退出
        int res=gethigh(pRoot);
        if(res==-1)return false;
        else return true;
    }
    /*
    bool depth(TreeNode* root,int lefthigt,int righthigt){
        if(root==nullptr){
            return 1;
        }
        int left=depth(root->left,lefthigt+1,righthigt);
        int right=depth(root->right,left,righthigt+1);
        int high=abs(left-right);
        if(high>1)return false;
        else return 1;
    */
    //这段代码不对,因为是凭感觉写的,并没有分析怎么去分治写代码
        int gethigh(TreeNode* root){
        if(root==nullptr)return 0;
        int left=gethigh(root->left);//这里又有一些混乱,是因为不知道这个函数的返回值是怎么传递的,它其实就是在调用这个函数的时候返回一个信息,这个信息可以穿越当前层被保存下来,声明一个int类型变量去接收这个值,接受的其实是这一层的高度.
        if(left==-1)return -1;//这里return的是负一,因为这一层不符合所有层都不符合.需要向上传递,直到退出所有所有函数
        int right=gethigh(root->right);
        if(right==-1)return -1;
        int high=abs(left-right);
        if(high>1)return -1;
        else return max(left, right)+1;
    }
};
    

全部评论

相关推荐

鱼专:别投了,我看到有人点了第二个链接投递,还没退出界面,不合适的邮件就发过来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务