1.题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
1.1 什么叫做平衡二叉树
- 节点为空或者节点的左右子树的高度差小于1
2.基本思路
- 判断一个节点的左右子节点是不是平衡二叉树
- 一个节点的左右子节点的高度差是不是小于1
上面两个条件都得满足即:
- 在判断左右子节点是不是平衡二叉树的时候还要求其高度
3.代码
第二次实现
bool isBalanced(TreeNode *pRoot,int &d){ int dL,dR; bool res=true; dL=dR=0; if(pRoot){ res = isBalanced(pRoot->left,dL) && isBalanced(pRoot->right,dR) ; res = res && ( abs(dL-dR)<=1 ); d=max(dL,dR)+1; } return res; } bool IsBalanced_Solution(TreeNode* pRoot) { bool res=true; if(pRoot==NULL) return res; int d; res=isBalanced(pRoot,d); return res; }
第一次实现
int DeepthTree(TreeNode* pRoot){ int deep=0,deepR,deepL; if(pRoot){ deepL=DeepthTree(pRoot->left); deepR=DeepthTree(pRoot->right); deep=max(deepR,deepL)+1; } return deep; } bool IsBalanced(TreeNode* pRoot){ if(pRoot==NULL) return true; int deepL=0,deepR=0; deepL=DeepthTree(pRoot->left); deepR=DeepthTree(pRoot->right); if( abs(deepR-deepL )<=1 && IsBalanced(pRoot->left) && IsBalanced(pRoot->right)) return true; else return false; } bool IsBalanced_Solution(TreeNode* pRoot) { bool res=true; res=IsBalanced(pRoot); return res; }
- 第一次实现是将求节点高度和判断左右子节点是否平衡当作了两个过程。代码冗余度太高了。