LeetCode---Balanced Binary Tree
来源:互联网 发布:linux 迅雷下载 编辑:程序博客网 时间:2024/06/06 15:48
题目大意:给出一个二叉树判断其是否是平衡二叉树。
算法思想:
由平衡二叉树的性质可知,其左右子树的深度之差是小于等于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: int maxDepth(TreeNode* root) { if(root==NULL) return 0; else return 1+max(maxDepth(root->left),maxDepth(root->right)); } bool isBalanced(TreeNode* root) { if(root==NULL) return true; int a=maxDepth(root->left); int b=maxDepth(root->right); if(abs(a-b)<=1) return isBalanced(root->left)&&isBalanced(root->right); else return false; }};
解法二:
由于解法一中对于大部分节点会出现多次遍历的情况从而使得时间效率不高。先采用后序遍历的方法,对于每个节点遍历时同时求出它的高度,之后比较其左右子树的高度即可。
代码如下:
class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL||(pRoot->left==NULL&&pRoot->right==NULL)) return true; int depth=0; return isBalanced(pRoot,depth); } bool isBalanced(TreeNode *root,int &depth){ if(root==NULL){ depth=0; return true; } int a=0,b=0; isBalanced(root->left,a); isBalanced(root->right,b); depth=max(a,b)+1; if(abs(a-b)<2) return true; return false; }};
0 0
- LeetCode: Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [Leetcode] Balanced Binary Tree
- LeetCode : Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- 【leetcode】Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- [Leetcode]Balanced Binary Tree
- [leetcode]Balanced Binary Tree
- Leetcode: Balanced Binary Tree
- LeetCode-Balanced Binary Tree
- LeetCode - Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- LeetCode | Balanced Binary Tree
- 【leetcode】Balanced Binary Tree
- U_boot 的 bootcmd 和bootargs参数详解
- asp.net TemplateField模板中的Bind方法和Eval方法
- jQuery ajax - ajax() 方法
- java 文件流
- ASP.NET中EVAL用法大全
- LeetCode---Balanced Binary Tree
- C++一种智能指针的实现
- Microcode
- 一张图了解RTMP交互过程
- spring mvc与Mybatis整合——(一)基础入门--概览
- UIButton添加block点击事件
- 面试准备
- javax.servlet.jsp.PageContext cannot be resolved to a type的解決之道
- Eclipse automatically build