Java算法之相同的树

171 阅读2分钟

原题连接:leetcode-cn.com/problems/sa…

题目描述: 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

样例1

样例2

样例3

思路:

可以参考二叉树中序遍历的方法:

1.先看两个二叉树当前节点的val是否相等,若二叉树则这个这两个二差树肯定是不等的

2.再递归看两个二叉树的左边节点是否相等,若不等,则二叉树肯定是不等的

3.再递归看两个二叉树的右边边节点是否相等,若不等,则二叉树肯定是不等的

上代码

二叉树的类:

 class TreeNode {
         int val;
         TreeNode left;
         TreeNode right;
         TreeNode(int x) { val = x; }

         }

遍历方法:

  public static   boolean printNode(TreeNode node,TreeNode node2){
        if (node.val!=node2.val){//比较当前节点
            return false;
        }
        if(node.left!=null&&node2.left!=null){//若左边两个都不为空 可以进行递归调用
            if(!printNode(node.left,node2.left)){
                return false;
            }
        }else if (node.left==null&&node2.left==null){//若左边两个都为空  则肯定是相等的  这里只是为了区别else的情况
           
        }else{//做左边有一个为空  则肯定不想等
            return false;
        }

        if(node.right!=null&&node2.right!=null){//同左边
            if(!printNode(node.right,node2.right)){
                return false;
            }
        }else if (node.right==null&&node2.right==null){
            return true;
        }else{
            return false;
        }
        
        return true;//不同的情况都排除了 当然是对的

    }

编写样例1测试代码

public class Main{
     public static void main(String[]args){
         TreeNode root1 = new TreeNode(1);
         TreeNode roo1L = new TreeNode(2);
         TreeNode roo1R = new TreeNode(3);
         root1.left = roo1L;
         root1.right = roo1R;

         TreeNode root2 = new TreeNode(1);
         TreeNode roo2L = new TreeNode(2);
         TreeNode roo2R = new TreeNode(3);
         root2.left = roo2L;
         root2.right = roo2R;

         System.out.println(Solution.printNode(root1,root2));

     }
}

结果:

编写样例2测试代码

public class Main{
     public static void main(String[]args){
         TreeNode root1 = new TreeNode(1);
         TreeNode roo1L = new TreeNode(2);
//         TreeNode roo1R = new TreeNode(3);
         root1.left = roo1L;
//         root1.right = roo1R;

         TreeNode root2 = new TreeNode(1);
//         TreeNode roo2L = new TreeNode(2);
         TreeNode roo2R = new TreeNode(2);
//         root2.left = roo2L;
         root2.right = roo2R;

         System.out.println(Solution.printNode(root1,root2));

     }
}

结果:

编写样例3测试代码

public class Main{
     public static void main(String[]args){
         TreeNode root1 = new TreeNode(1);
         TreeNode roo1L = new TreeNode(1);
         TreeNode roo1R = new TreeNode(2);
         root1.left = roo1L;
         root1.right = roo1R;

         TreeNode root2 = new TreeNode(1);
         TreeNode roo2L = new TreeNode(2);
         TreeNode roo2R = new TreeNode(1);
         root2.left = roo2L;
         root2.right = roo2R;

         System.out.println(Solution.printNode(root1,root2));

     }
}

结果: