求镜像(leetcode226):
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return root;
}
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
判断两棵树是否一样(leetcode100):
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}else if(p == null || q == null){
return false;
}
if(p.val != q.val){
return false;
}
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
}
判断二叉树是否是对称的(leetcode101):
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null ){
return true;
}
return helper(root.left,root.right);
}
public static boolean helper(TreeNode p, TreeNode q){
if(p == null && q == null){
return true;
}else if(p == null || q == null){
return false;
}
if(p.val != q.val){
return false;
}
return helper(p.left, q.right)&&helper(p.right, q.left);
}
}
判断根到叶子结点是否有路径和等于n(leetcode112):
同样递归:求二叉树根到叶子节点有没有路径和等于n,即求其左子树或右子树中有没有路径和为n-root.val。
这里要注意是根到叶子结点而不是非叶子节点,所以递归结束条件要注意判断节点是不是叶子节点。
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null){
return false;
}
if(root.val == sum && root.left == null && root.right == null){
return true;
}
return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}
}
112