输入一棵二叉树,判断该二叉树是否是平衡二叉树。
方法一:递归,每次求解left,right的深度然后做差判断。之后递归left&&right。
1 class Solution { 2 public: 3 bool IsBalanced_Solution(TreeNode* pRoot) { 4 if(pRoot==NULL) return true; 5 int left=treedepth(pRoot->left); 6 int right=treedepth(pRoot->right); 7 int diff=left-right; 8 if(diff>1||diff<-1) 9 return false; 10 return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right); 11 } 12 private: 13 int treedepth(TreeNode* p){ 14 if(p==NULL) return 0; 15 int left=treedepth(p->left); 16 int right=treedepth(p->right); 17 return (left>right?left+1:right+1); 18 } 19 };
方法二:每次递归都判断是否为平衡,减少遍历次数。
1 class Solution { 2 public: 3 bool IsBalanced_Solution(TreeNode* pRoot) { 4 if(pRoot==NULL) return true; 5 int depth=0; 6 return isbalance(pRoot,&depth); 7 } 8 private: 9 bool isbalance(TreeNode* p,int * depth){ 10 if(p==NULL){ 11 *depth=0; 12 return true; 13 } 14 15 int left; 16 bool bl; 17 bl=isbalance(p->left,&left); 18 int right; 19 bool br; 20 br=isbalance(p->right,&right); 21 if(bl&&br){ 22 *depth=left>right?left+1:right+1; 23 int diff=left-right; 24 if(diff>1||diff<-1) 25 return false; 26 else 27 return true; 28 } 29 return false; 30 } 31 };