二叉樹的深度:
使用遞歸,複雜度與樹的結點樹有關
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL) {
return 0;
}
int left=TreeDepth(pRoot->left);
int right=TreeDepth(pRoot->right);
return left>right ? left+1: right+1;
}
};
平衡二叉樹
思路與上題類似,這裏用一個引用變量來存儲樹的深度
#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include<cmath>
#include<algorithm>
#include<stack>
#include<map>
#include<sstream>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=0;
return isBalancedTreeWithDepth(pRoot,depth);
}
bool isBalancedTreeWithDepth(TreeNode* pRoot,int & depth) {
if(pRoot==NULL) {
return true;
}
int leftDepth=0,rightDepth=0;
bool leftRes=isBalancedTreeWithDepth(pRoot->left,leftDepth);
bool rightRes=isBalancedTreeWithDepth(pRoot->right,rightDepth);
depth=leftDepth>rightDepth ? leftDepth+1 : rightDepth+1;
if(abs(leftDepth-rightDepth)>1) {
return false;
} else {
return true;
}
}
};
int main()
{
// vector<int> test={3,1,2};
Solution sol;
TreeNode* test=new TreeNode(3);
test->left=new TreeNode(1);
test->left->left=new TreeNode(0);
int res=sol.IsBalanced_Solution(test);
cout<<res<<endl;
system("pause");
return 0;
}