1.判断两棵树是否相等:结构相同,且节点值也相同
思路:运用递归,判断每个根节点或父节点及其左右孩子是否相等
public class Main{
public static void main(String[] args){
}
public boolean isSame(TreeNode p,TreeNode q){
if (p == null && q == null){
return true;
}
if (p == null || q == null){
return false;
}
if (p.val != q.val){
return false;
}
return isSame(p.left,q.left) && isSame(p.right,q.right);
}
}
class TreeNode{
TreeNode left;
TreeNode right;
int val;
}
2.对称二叉树
思路:还是运用递归,但在check方法的最后我们要比较的是左边的左孩子和右边的右孩子,或者左边的右孩子和右边的左孩子
public class Main{
public boolean isSame(TreeNode root){
if (root == null)
return true;
return check(root.left,root.right);
}
public boolean check(TreeNode p,TreeNode q){
if (p == null && q == null)
return true;
if (p == null || q == null)
return false;
if (p.val != q.val)
return false;
return check(p.left,q.right) && check(p.right,q.left);
}
}
class TreeNode{
TreeNode left;
TreeNode right;
int val;
}
3.合并二叉树
思路:合并时有三种情况:
1.一个为空,一个不为空,则节点为非空节点
2.都不为空,则节点为两个节点相加
3.都为空,则节点为空
public TreeNode mergeTwoTree(TreeNode p ,TreeNode q){
if (p == null)
return q;
if (q == null)
return p;
TreeNode merged = new TreeNode(p.val + q.val);
merged.left = mergeTwoTree(p.left,q.left);
merged.right = mergeTwoTree(p.right,q.right);
return merged;
}