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);
            }
        }
        
        
    }
}
View Code

相关文章: