標籤:
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
方法一:遞迴,每次求解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 else27 return true;28 }29 return false;30 }31 };
平衡二叉樹