• 4.1二叉树平衡检查


    题目描述

    实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。

    给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。

    解法:1.递归求取节点的高度,注意递归终止条件,其余就是取左右子树最大的高度。  2.递归求取高度差,注意终止条件,为空的时候返回true,递归之前判断是否满足平衡条件,否则中途就该跳出递归,返回false。  左右子树节点继续递归。

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    
    class Balance {
    public:
        bool isBalance(TreeNode* root) {
            // write code here
            int diff;
            if(root == NULL) return true;  //能够递归到叶节点,就说明中途无false的情况,所以结束条件为null
            diff = abs(height(root->left) - height(root->right));
            if (diff > 1) return false;   //先判断是否满足条件,然后再递归
            else return (isBalance(root->left) && isBalance(root->right));
            
        }
        int height(TreeNode* root) {
            if(root == NULL) return 0;
            else return max(height(root->left), height(root->right)) + 1;  //递归求取高度,更节点为1
        }
    };
    

      

  • 相关阅读:
    Mybatis使用resultType实现一对一查询
    利用webSocket使网页和服务器通信
    hdu--1728--special bfs
    hdu--1429--状压bfs
    hdu--3006--不知为何wa
    hdu--3001--类似旅行商<tsp>
    hdu--2660--二维费用背包
    hdu--4632--dp
    hdu--4497--数论
    hdu--4496--并查集
  • 原文地址:https://www.cnblogs.com/xiaohaigege/p/5522358.html
Copyright © 2020-2023  润新知