Question:
问题:给定两个树,判断是否相等(结构相同且值相同)
Idea:
(1)处理树的问题,首先判断是否为空,是否只有一个根节点。
(2)特殊情况:两棵数均为空,一棵树为空,只有根节点时是否相等
(3)一般情况:判断是否相等,则应判断节点+左子树+右子树是否均相等。因此是一个递归的过程。根据left&&right判断
因此递归函数需要携带left和right的值。
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;
}
boolean left = true;
boolean right = true;
return traversalTree(p, q, left, right);
}
public boolean traversalTree(TreeNode p, TreeNode q,boolean left,boolean right){
//可能左节点和右节点都为空,说明检查到叶子节点,返回true
if(p==null&&q==null){
return true;
}
//其中有一个为空,则说明结构不等
else if(p==null||q==null){
return false;
}
//节点不等,则为false
if(p.val!=q.val){
return false;
}
//根相等,分别判断左子树、左子树
left = traversalTree(p.left, q.left, left, right);
right = traversalTree(p.right, q.right, left, right);
return left&&right;
}