Input: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
Output: true
Example 2:
Input: 1 1
/ \
2 2
[1,2], [1,null,2]
Output: false
Example 3:
Input: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
Output: false
判断两个二叉树是否相等。
一:使用递归。
public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q==null) return true; if(p==null||q==null) return false; if(p.val==q.val) return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right); return false; }
二:根据遍历出来的顺序,但是由于遍历右左子树可能有一个为空,会影响结果。
class Solution { StringBuilder sb1=new StringBuilder(); StringBuilder sb2=new StringBuilder(); public boolean isSameTree(TreeNode p, TreeNode q) { /**遍历:出现左右子树只有一个为空时,用null代替存储。所以直接用StringBuilder来存储遍历的结果。 */ if(p==null&&q==null) return true; if(p==null||q==null) return false; bianLi(p,sb1); bianLi(q,sb2); return sb1.toString().equals(sb2.toString()); } public void bianLi(TreeNode node,StringBuilder sb){ if(node!=null){ sb.append(node.val); if(node.left!=null&&node.right!=null){ bianLi(node.left,sb); bianLi(node.right,sb); } if(node.left!=null){ bianLi(node.left,sb); sb.append("null"); } if(node.right!=null){ sb.append("null"); bianLi(node.right,sb); } } } }