226.翻转二叉树
可以做,先确定递归函数的作用(定义),再看递归函数需要怎么遍历以及每次遍历需要做什么。
class Solution {
public void invert(TreeNode root){
if(root==null)
return;
if(root.left==null&&root.right==null)
return;
TreeNode t=new TreeNode();
t=root.left;
root.left=root.right;
root.right=t;
invert(root.left);
invert(root.right);
}
public TreeNode invertTree(TreeNode root) {
invert(root);
return root;
}
}
112.路径总和
这题我做麻烦了,用了俩个递归函数,第一个递归把该节点之前遍历的数的总和赋给这个结点,第二个递归,遍历所有结点,如果叶子结点中有targetsum说明没问题。
class Solution {
int flag=0;
public void f(TreeNode root){
if(root==null)
return;
if(root.left!=null)
root.left.val=root.left.val+root.val;
if(root.right!=null)
root.right.val=root.right.val+root.val;
f(root.left);
f(root.right);
}
public void f2(TreeNode root,int targetSum){
if(root==null)
return;
if(root.left==null&&root.right==null&&root.val==targetSum)
flag=1;
f2(root.left,targetSum);
f2(root.right,targetSum);
}
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root==null)
return false;
f(root);
f2(root,targetSum);
if(flag==1)
return true;
else return false;
}
}