二叉树 | LeetCode 110 平衡二叉树

64 阅读1分钟

题目描述

给定一个二叉树,判断它是否是平衡二叉树

本题思路

判断是否平衡需要判断树中所有节点的左右子树的高度差。那么思路就是求出左右子树的高度,然后如果差值小于等于1,则返回二叉树的高度,否则返回-1,表示已经不是二叉平衡树。

递归

递归代码如下:

class Solution {
public:
    // 返回高度,如果不平衡则返回-1
    int getHeight(TreeNode* node) {
        if (node == nullptr)
            return 0; // 为空则无高度
        int leftHeight = getHeight(node->left);
        if (leftHeight == -1)
            return -1;
        int rightHeight = getHeight(node->right);
        if (rightHeight == -1)
            return -1;
        int result;
        if (abs(leftHeight - rightHeight) > 1)
            return -1;
        else
            return 1 + max(leftHeight, rightHeight);
        return result;
    }
    bool isBalanced(TreeNode* root) {
        return getHeight(root) == -1 ? false : true;
    }
};

误区

递归一定要围绕着整体来想。int leftHeight = getHeight(node->left);写代码时还没写完整个递归,就开始想左子树高度为什么等于getHeight。自己调用自己,自己都没有完善能想出什么(纯死循环)。应该先相信这就是可以求出子树的高度,向下逐步完善整个单层递归的逻辑。

总结

二叉树的题目想利用递归求解,需要将前中后序遍历理解深刻会更有助于解题。

迭代

迭代暂时没掌握