1、比较两个二叉树是否相同
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null) return true;
if((p != null && q == null) || (p == null && q != null) ) return false;
if(p != null && q != null) {
if (p.val != q.val) {
return false;
}
}
return isSameTree(p.left ,q.left) && isSameTree(p.right,q.right);
}
}
2、 判定两个二叉树是否是包含关系
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null) return true;
if((p != null && q == null) || (p == null && q != null) ) return false;
if(p != null && q != null) {
if (p.val != q.val) return false;
}
return isSameTree(p.left ,q.left) && isSameTree(p.right,q.right);
}
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if (root == null) return false;
if(isSameTree(root,subRoot)) return true;
return isSubtree(root.left ,subRoot) || isSubtree(root.right,subRoot);
}
}
3、 判定一个二叉树是否是平衡二叉树
class Solution {
public int isBalancedChild(TreeNode root) {
if (root == null) return 0;
int leftHeight = isBalancedChild(root.left);
int rightHeight = isBalancedChild(root.right);
if (leftHeight >= 0 && rightHeight >= 0 && Math.abs(leftHeight-rightHeight)<=1) {
return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;
}else{
return -1;
}
}
public boolean isBalanced(TreeNode root) {
if (root == null) return true;
return isBalancedChild(root) >= 0;
}
}
4、判定一个二叉树是否是对称
class Solution {
public boolean isSymmetricChild(TreeNode p,TreeNode q) {
if (p == null && q == null) return true;
if ((p == null && q != null) || (p != null && q == null)) {
return false;
}
if (p.val != q.val) return false;
return isSymmetricChild(p.left,q.right) && isSymmetricChild(p.right,q.left);
}
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return isSymmetricChild(root.left,root.right);
}
}