- 题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 思路:
- 平衡二叉树的原理和概念:左右子树的高度差绝对值小于1;左右子树必须也都是平衡二叉树
- 复杂度是nlogn,计算高度logn,n颗子树(递归深度logn,递归次数是n)
- 启发或者坑
- 获取高度或者深度的时候,注意如果节点为空,返回值应该是多少
- 代码
class Solution { public: int getDepth(TreeNode* root){ if (root==NULL) return 0; int leftDepth = 1; int rightDepth = 1; if (root->left) { leftDepth = getDepth(root->left)+1; } if (root->right) { rightDepth = getDepth(root->right)+1; } return max(leftDepth, rightDepth); } bool IsBalanced_Solution(TreeNode* pRoot) { //左右两个节点的高度差绝对值小于1,而且两棵树也必须是平衡二叉树 if (pRoot == NULL) return true; int leftchildDepth = getDepth(pRoot->left); int rightchildDepth = getDepth(pRoot->right); return abs(leftchildDepth-rightchildDepth)<=1 && IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right); } };
剑指offer 42.平衡二叉树
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103906097
今日推荐
周排行