LeetCode_110. 平衡二叉树

题目

LeetCode_110. 平衡二叉树

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

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

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 。

题解

思路:
1. 总体思路: 一棵树是否平衡,要满足三个条件:左子树平衡,右子树平衡,左右子树高度差不大于1,因为题目给出的函数框架中返回值是bool类型,而我们要获得子树的高度,所以我们写一个gethigh 函数去获得子树高度同时判断树是否平衡。
2. 先赋予 gethigh 函数语义: 如果树不平衡返回-1,否则返回树高
3. 设计函数: 如果根节点为空则树平衡,返回高度为 0 ,否则调用 gethigh 函数获得左右子树的高度。判断如果左右子树不平衡或者左右子树高度差大于 1, 则此树不平衡,返回 -1,否则返回左右子树中较大的高度加一。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

int gethigh(struct TreeNode *root) {
    if (root == NULL) return 0;
    int r = gethigh(root->right);
    int l = gethigh(root->left);
    if (r == -1 || l == -1 || abs(r - l) > 1) return -1;
    return r > l ? r + 1 : l + 1;
}

bool isBalanced(struct TreeNode *root) {
    return gethigh(root) != -1;
}


LeetCode练习汇总




猜你喜欢

转载自blog.csdn.net/skange/article/details/81836556