当前位置: 首页 > article >正文

代码随想录 二叉树—平衡二叉树

思路:平衡二叉树的特点是每个节点的左右子树的高度差的绝对值不超过1。小tips:与高度相关的用后序遍历,与深度相关的用前序遍历。高度是自下而上来算,深度是自上而下像钻井一般。那这里用后序遍历,左右中。先处理左子树,这里的-2作为信号,换成别的负数也没问题。如果左子树就不是平衡二叉树,那就继续把-2信号返回,再处理右子树同理。最后处理中间,判断左右子树的高度差,如果大于1,就继续返回-2信号,如果小于等于1就返回父节点的高度,即1+左右子树较大值。

题解c++:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int getHeight(TreeNode* node)
    {
        if(node==NULL) return 0;
        int leftHeight=getHeight(node->left);
        if(leftHeight==-2) return -2;
        int rightHeight=getHeight(node->right);
        if(rightHeight==-2) return -2;
        return abs(leftHeight-rightHeight)>1 ? -2:1+max(leftHeight,rightHeight);
    }
    bool isBalanced(TreeNode* root) {
        return getHeight(root)== -2 ? false:true;


    }
};


http://www.kler.cn/a/273071.html

相关文章:

  • 代码随想录第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子之和、222.完全二叉树的节点个数
  • 【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields
  • Android 使用ninja加速编译的方法
  • 【AI】【提高认知】深度学习与反向传播:理解AI的基础
  • SpringBoot+VUE2完成WebSocket聊天(数据入库)
  • 练习LabVIEW第三十七题
  • 2023年度VSCode主题推荐(个人常用主题存档)
  • Machine Learning ---- Feature Scaling
  • 学完排序算法,终于知道用什么方法给监考完收上来的试卷排序……
  • VS2022 配置QT5.9.9
  • uniapp 兼容pc与手机的样式方法
  • hcia复习总结9
  • Custom GPTs Are Here and Will Impact Everything AI
  • Milvus向量数据库检索
  • 【大数据面试题】 018 数据仓库的分层了解吗?说说你的理解
  • Python 小爬虫:爬取 bing 每日壁纸设为桌面壁纸
  • 最新WordPress网址导航设计师主题风格网站源码
  • 基于vue实现bilibili网页
  • Java面试题总结15之简述你对RPC,RMI的理解
  • 如何用 UDP 实现可靠传输?并以LabVIEW为例进行说明
  • springboot277流浪动物管理系统
  • python 直方图
  • js基础语法大全(时间戳,uuid,字符串转json)
  • 大模型—概念
  • 从零开始学HCIA之SDN04
  • HTML_CSS练习:HTML注释