leetcode110 平衡二叉树

简介: leetcode110 平衡二叉树

平衡二叉树


29d22b9252884da6b21404f472bd30ed.png

二叉树的深度:从根节点往下查到叶子节点

二叉树的高度:从叶子节点往上查到根节点


27077e3cba784115a9f9c04e2f06cce3.png

求二叉树的深度和高度

深度:前序遍历

  • 深度从根节点往下找,在递归栈增加的时候计算
    高度:后序遍历
  • 高度从叶子节点网上找,在递归栈减少的时候计算
/**
 * 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:
  //计算树的高度,后序遍历。当不是平衡二叉树(左右子树高度最多差1)的时候返回-1
    int get_tree_height(TreeNode* cur)
    {
        if(cur==nullptr) return 0;
        int left_height = get_tree_height(cur->left);
        if(left_height == -1) return -1;//如果左子树不是平衡二叉树,整个树也不是平衡二叉树
        int right_height =get_tree_height(cur->right);
        if(right_height == -1) return -1;//如果右子树不是平衡二叉树,整个树也不是平衡二叉树
    //两个子树是平衡二叉树,但是不确定整个树是不是平衡二叉树,计算两个树的高度差
    //如果高度差大于1,则不是平衡二叉树。如果高度差是0或者1,则平衡二叉树的高度是最高子树加上根节点1
        return  abs(left_height - right_height) > 1 ? -1 : 1+max(left_height , right_height);
    }
    bool isBalanced(TreeNode* root) {
        if(root == nullptr) return true;
        return  get_tree_height(root)== -1 ? false:true;
    }
};

二刷

/**
 * 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 back_tark(TreeNode* cur)
    {
        if(cur == nullptr) return 0;
        int left_deep = back_tark(cur->left);
        int right_deep = back_tark(cur->right);
        if(left_deep==-1||right_deep==-1) return -1;
        if( abs(left_deep - right_deep) <= 1) return max(left_deep,right_deep)+1;
        else return -1;
    }
    bool isBalanced(TreeNode* root) {
        if(root==nullptr) return true;
        if(back_tark(root) == -1) return false;
        else return true;
    }
};

相关文章
|
3月前
【LeetCode 33】110.平衡二叉树
【LeetCode 33】110.平衡二叉树
21 1
|
8月前
leetcode代码记录(平衡二叉树
leetcode代码记录(平衡二叉树
45 0
|
5月前
|
算法 Java 关系型数据库
leetcode110-平衡二叉树
文章通过LeetCode第110题"平衡二叉树"的解题过程,深入讲解了平衡二叉树的定义、树的高度概念,并提供了使用后序遍历算法判断二叉树是否平衡的Java代码实现,强调了理解理论知识和实践编码的重要性。
|
5月前
|
Python
【Leetcode刷题Python】110. 平衡二叉树
LeetCode第110题"平衡二叉树"的Python解决方案,通过计算二叉树的高度并判断任意两个子树的高度差是否不超过1来确定树是否平衡。
33 2
|
算法
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
62 0
|
7月前
|
SQL 算法 数据挖掘
力扣110:平衡二叉树
力扣110:平衡二叉树
LeetCode | 110. 平衡二叉树
LeetCode | 110. 平衡二叉树
|
8月前
|
Java C++ Python
leetcode-110:平衡二叉树
leetcode-110:平衡二叉树
54 0
LeetCode刷题Day14——二叉树(完全二叉树、平衡二叉树、二叉树路径、左叶子之和)
一、完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
51 0