LeetCode 110. 平衡二叉树
class Solution {
public:
int getdepth(TreeNode* node){
if(node==NULL)return 0;
int leftdepth=getdepth(node->left);
if(leftdepth==-1)return -1;
int rightdepth=getdepth(node->right);
if(rightdepth==-1)return -1;
if(abs(leftdepth-rightdepth)>1)return -1;
else return 1+max(leftdepth,rightdepth);
}
bool isBalanced(TreeNode* root) {
return getdepth(root)==-1 ? false : true;
}
};
每次计算左右深度时还要判断一次是否为平衡二叉树
迭代法真麻烦
LeetCode 257. 二叉树的所有路径
class Solution {
public:
void traversal(TreeNode* node,vector<int>& path,vector<string>& result){
path.push_back(node->val);
if(node->left==NULL && node->right==NULL){
string spath;
for(int i=0;i<path.size()-1;i++){
spath+=to_string(path[i]);
spath+="->";
}
spath+=to_string(path[path.size()-1]);
result.push_back(spath);
return ;
}
if(node->left){
traversal(node->left,path,result);
path.pop_back();
}
if(node->right){
traversal(node->right,path,result);
path.pop_back();
}
return ;
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
vector<int> path;
traversal(root,path,result);
return result;
}
};
粗略过一遍,精简代码没过细研究。
LeetCode 404.左叶子之和
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root==NULL)return 0;
if(root->left==NULL && root->right==NULL)return 0;
int leftvalue=0;
if(root->left!=NULL)leftvalue=sumOfLeftLeaves(root->left);
if(root->left!=NULL && root->left->left==NULL && root->left->right==NULL){
leftvalue=root->left->val;
}
int rightvalue=0;
if(root->right)rightvalue=sumOfLeftLeaves(root->right);
return leftvalue+rightvalue;
}
};
过了一遍,较好理解,迭代法没看。
越来越懒了,只想过一遍,仔细总结规律慢慢研究太麻烦,耗时间,最近比较忙,期末了。活动也多。