package class06;
/***
 * 判断两个二叉树是否相同
 *
 * 已知两个数的头节点分别是head1和head2。
 * 结构相同并且对应的节点的值也相同,则认为它们是相同的。
 */
//测试链接:https://leetcode.com/problems/same-tree
public class Code02_SameTree {
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val) {
            this.val = val;
        }
    }
    public static boolean isSameTree(TreeNode head1, TreeNode head2) {
        if (head1 == null ^ head2 == null) {//head1==null和head2==null不相等,即一个为空并且一个不为空。
            return false;
        }
        if (head1 == null && head2 == null) {//两个都是空
            return true;
        }
        //如果头节点的值相等。并且head1的左子节点和head2的左子节点相等。并且head1的右子节点和head2的右子节点相等。那么总体返回true。
        //否则返回false。
        return head1.val == head2.val && isSameTree(head1.left, head2.left) && isSameTree(head1.right, head2.right);
    }
    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode(1);
        treeNode.left = new TreeNode(2);
        treeNode.right = new TreeNode(3);
        treeNode.left.left = new TreeNode(4);
        treeNode.left.right = new TreeNode(5);
        treeNode.right.left = new TreeNode(6);
        treeNode.right.right = new TreeNode(7);
        boolean sameTree = isSameTree(treeNode, treeNode);
        System.out.println("sameTree = " + sameTree);
    }
}