1.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
思路一:利用树的最大深度函数
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isBalanced(TreeNode* root) { if(root==nullptr) return true; if(abs(dfs(root->left)-dfs(root->right))<=1) { return isBalanced(root->left)&&isBalanced(root->right); } else { return false; } return true; } int dfs(TreeNode *root) { if(root==nullptr) return 0; int left=dfs(root->left); int right=dfs(root->right); return left>right?left+1:right+1; } };
思路二:自底向上的递归
class Solution { public: int height(TreeNode* root) { if (root == NULL) { return 0; } int leftHeight = height(root->left); int rightHeight = height(root->right); if (leftHeight == -1 || rightHeight == -1 || abs(leftHeight - rightHeight) > 1) { return -1; } else { return max(leftHeight, rightHeight) + 1; } } bool isBalanced(TreeNode* root) { return height(root) >= 0; } };