剑指offer 39.判断二叉树是否为平衡二叉树
2017-04-13 11:13
447 查看
题目
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:如果直接使用递归遍历,会重复遍历之前的节点,更好的方法是采用后序遍历,对每个节点来说,我们都已经遍历了它的左右子树,所以边遍历边判断,最后遍历到树的根节点时,判断完毕。
递归遍历:
class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return true; int left=IsBalanced_Solution(pRoot->left); int right=IsBalanced_Solution(pRoot->right); int diff=left-right; if(diff>1||diff<-1) return false; return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right); } };
后序遍历:
class Solution { public: bool IsBalanced(TreeNode* pRoot,int* pDepth){ if(pRoot==NULL){ *pDepth=0; return true; } int left,right; if(IsBalanced(pRoot->left,&left)&&IsBalanced(pRoot->right,&right)){ int diff=left-right; if(diff>=-1&&diff<=1){ *pDepth=(left>right)?(left+1):(right+1); return true; } } return false; } bool IsBalanced_Solution(TreeNode* pRoot) { int Depth=0; return IsBalanced(pRoot,&Depth); } };
相关文章推荐
- 剑指offer 39-二叉树的深度 判断二叉树是否为平衡二叉树
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树
- 剑指Offer面试题39二叉树的深度(以及判断平衡二叉树),面试题40数组中只出现一次的数字
- 剑指offer面试题39:二叉树深度以及判断平衡二叉树
- 剑指Offer----面试题39(2):判断是否为平衡二叉树
- 剑指Offer 39题 二叉树的深度 && 判断平衡二叉树 Java版
- 剑指offer 编程题(39):判断是否是平衡二叉树
- 剑指offer-判断该二叉树是否是平衡二叉树
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- 剑指offer 6.3 知识迁移能力3- 判断二叉树是否是平衡二叉树
- 【剑指offer】判断二叉树是否为平衡二叉树
- 剑指offer 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 剑指Offer--039-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]
- 剑指offer 39. 二叉树的深度和判断是否为平衡二叉树
- 剑指Offer学习总结-判断二叉树是否是平衡二叉树
- 剑指Offer_面试题39_二叉树的深度 & 判断平衡二叉树
- 剑指offer—关于判断二叉树是否为平衡二叉树
- 剑指offer:java判断二叉树是否对称
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现