LeetCode 110. Balanced Binary Tree
Posted 約束の空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 110. Balanced Binary Tree相关的知识,希望对你有一定的参考价值。
二叉树的问题,这里主要关心一下时间复杂度。
先回忆一下求二叉树深度的问题,T(n) = 2T(n/2)+1 -> O(n)
本题 T(n) = 2T(n/2) + O(n) -> O(nlogn) 最坏情况是O(n^2)
class Solution { public: bool isBalanced(TreeNode* root) { if (root==NULL) return true; return isBalanced(root->left) && isBalanced(root->right) && abs(depth(root->left)-depth(root->right))<2; } int depth(TreeNode *root){ if (root==NULL) return 0; return 1+max(depth(root->left),depth(root->right)); } };
可以继续优化,一旦发现子树不是平衡的,返回-1,最后只要判断 f(root)!=-1 就可以了
时间复杂度O(n),空间复杂度O(H)
class Solution { public: bool isBalanced(TreeNode* root) { return depth(root)!=-1; } int depth(TreeNode *root){ if (root==NULL) return 0; int left=depth(root->left); if (left==-1) return -1; int right=depth(root->right); if (right==-1) return -1; if (abs(left-right)>1) return -1; return 1+max(left,right); } };
以上是关于LeetCode 110. Balanced Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 110. Balanced Binary Tree 递归求解
[LeetCode]题解(python):110 Balanced Binary Tree
leetcode-110. Balanced Binary Tree
LeetCode_110. Balanced Binary Tree