平衡二叉树

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

方法一:递归,每次求解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 };
原文地址:https://www.cnblogs.com/zl1991/p/4777317.html