总结
感觉树的题目很多情况下都在考遍历,也可能是我刷的太少hhh,就是DFS和BFS~
题目I
![](https://i-blog.csdnimg.cn/blog_migrate/15b71f0bb55b4ae459aabd8f177f54fe.png)
题解
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL){
return false;
}
int temp=0;
return help(root,sum,temp);
}
bool help(TreeNode* p,int sum,int temp){
if((p->val+temp==sum) and (p->left==NULL) and (p->right==NULL)){
return true;
}
else{
if(p->left==NULL and p->right==NULL){
return false;
}
else if(p->left==NULL and p->right!=NULL){
return help(p->right,sum,p->val+temp);
}
else if(p->right==NULL and p->left!=NULL){
return help(p->left,sum,p->val+temp);
}
else{
return help(p->right,sum,p->val+temp) or help(p->left,sum,p->val+temp);
}
}
}
感悟
因为是从根到叶节点,所以想到的是深度遍历。传入到当前节点的(从根到当前节点)的值,来判断是否正确,需要注意的是当前节点必须是叶节点才符合要求
题目II
![](https://i-blog.csdnimg.cn/blog_migrate/f6b635194bc45504b54547ad0d841e4a.png)
题解
TreeNode* invertTree(TreeNode* root) {
if(root==NULL){
return NULL;
}
else{
help(root);
return root;
}
}
int help(TreeNode* p){
if(p->left==NULL and p->right==NULL){
return 1;
}
else if(p->left==NULL and p->right!=NULL){
p->left=p->right;
p->right=NULL;
help(p->left);
return 1;
}
else if(p->right==NULL and p->left!=NULL){
p->right=p->left;
p->left=NULL;
help(p->right);
return 1;
}
else{
TreeNode* t;
t=p->left;
p->left=p->right;
p->right=t;
help(p->left) and help(p->right);
return 1;
}
}
感悟
还是在考遍历,但是得理清楚递归的起始,递归的结束条件~