zoukankan      html  css  js  c++  java
  • LeetCode 110.平衡二叉树(C++)

    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

    示例 1:

    给定二叉树 [3,9,20,null,null,15,7]

        3
       / 
      9  20
        /  
       15   7

    返回 true 。

    示例 2:

    给定二叉树 [1,2,2,3,3,null,null,4,4]

           1
          / 
         2   2
        / 
       3   3
      / 
     4   4
    

    返回 false 。

    #include <iostream>
    #include <numeric>
    #include <algorithm>
    
    using namespace std;
    
    static int x = []() {std::ios::sync_with_stdio(false); cin.tie(0); return 0; }();
    
    struct TreeNode {
        int value;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int x) :value(x), left(NULL), right(NULL) {}
    };
    
    class Solution {
    public:
        bool isBalanced(TreeNode* root) {
            if (!root)//当二叉树为空时,依然满足平衡二叉树要求
                return true;
            Rec(root);
            return flag;
        }
    
        int Rec(TreeNode* T) {
            if (!T) {//递归结束条件,当递归到叶子节点末端结束
                return 0;
            }
            else {
                /*以[1,2,2,3,null,null,3,4,null,null,4]举例
                整体理解好一点: 先左再右(先搜索根结点左边的左叶子节点,再搜索根结点左边的右叶子节点;再搜索根结点右边的左叶子节点...)
                当搜索到左边左叶子节点末端,对子节点(假设中的"根结点")来说,高度为0。left = 0, right = 0,这个阶段结束,返回1("根结点")
                当开始回退到上一个节点,此时left = 1, 执行Rec(T->right)=>right = 0;函数结束,返回max(left, right)+1 = 2
                此时left = 2,...right = 0...
                最后反馈给根结点的是max(left=3, right=0)+1,flag = false;
    
                接着,开始搜索右叶子树,上面的相同,不过是将函数返回值用right接收
                */
                int left = Rec(T->left);
                int right = Rec(T->right);
                if (abs(left - right) > 1)
                    flag = false;
                return max(left, right) + 1;//+1的原因是要加上根结点
            }
        }
    private:
        bool flag = true;//当二叉树是平衡二叉树时,不会对flag进行任何操作
    };
    int main()
    {
        system("PAUSE");
        return 0;
    }
  • 相关阅读:
    centos7下部署nginx+supervisor+netcore2.1服务器环境
    centos6.1配置nodejs运行环境
    centos下远程访问redis端口配置
    如何成为一名合格的软件测试师
    Maven之安装及构建简单项目 掠影
    JAVA语言单元测试框架——JUnit浅析
    软件测试 之 白盒测试 掠影
    软件测试 之 黑盒测试 掠影
    以一个闰年检测程序为例的非法字符异常输入检测
    学习心得——测试框架浅析
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/10584702.html
Copyright © 2011-2022 走看看