微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LeetCode_100. Same Tree

 

100. Same Tree

Easy

Given two binary trees,write a function to check if they are the same or not.

Two binary trees are considered the same if they are structurally identical and the nodes have the same value.

Example 1:

Input:     1         1
          / \       /          2   3     2   3

        [1,2,3],[1,3]

Output: true

Example 2:

Input:     1         1
          /                    2             2

        [1,2],null,2]

Output: false

Example 3:

Input:     1         1
          / \       /          2   1     1   2

        [1,1],1,2]

Output: false

 

package leetcode.easy;

import java.util.arraydeque;

/**
 * DeFinition for a binary tree node. public class TreeNode { int val; TreeNode
 * left; TreeNode right; TreeNode(int x) { val = x; } }
 */
class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;

	TreeNode(int x) {
		val = x;
	}
}

public class SameTree {
	@org.junit.Test
	public void test1() {
		TreeNode tn11 = new TreeNode(1);
		TreeNode tn12 = new TreeNode(2);
		TreeNode tn13 = new TreeNode(3);
		tn11.left = tn12;
		tn11.right = tn13;
		tn12.left = null;
		tn12.right = null;
		tn13.left = null;
		tn13.right = null;

		TreeNode tn21 = new TreeNode(1);
		TreeNode tn22 = new TreeNode(2);
		TreeNode tn23 = new TreeNode(3);
		tn21.left = tn22;
		tn21.right = tn23;
		tn22.left = null;
		tn22.right = null;
		tn23.left = null;
		tn23.right = null;

		System.out.println(isSameTree1(tn11,tn21));
		System.out.println(isSameTree2(tn11,tn21));
	}

	@org.junit.Test
	public void test2() {
		TreeNode tn11 = new TreeNode(1);
		TreeNode tn12 = new TreeNode(2);
		tn11.left = tn12;
		tn11.right = null;
		tn12.left = null;
		tn12.right = null;

		TreeNode tn21 = new TreeNode(1);
		TreeNode tn22 = new TreeNode(2);
		tn21.left = null;
		tn21.right = tn22;
		tn22.left = null;
		tn22.right = null;

		System.out.println(isSameTree1(tn11,tn21));
	}

	@org.junit.Test
	public void test3() {
		TreeNode tn11 = new TreeNode(1);
		TreeNode tn12 = new TreeNode(2);
		TreeNode tn13 = new TreeNode(1);
		tn11.left = tn12;
		tn11.right = tn13;
		tn12.left = null;
		tn12.right = null;
		tn13.left = null;
		tn13.right = null;

		TreeNode tn21 = new TreeNode(1);
		TreeNode tn22 = new TreeNode(1);
		TreeNode tn23 = new TreeNode(2);
		tn21.left = tn22;
		tn21.right = tn23;
		tn22.left = null;
		tn22.right = null;
		tn23.left = null;
		tn23.right = null;

		System.out.println(isSameTree1(tn11,tn21));
	}

	public boolean isSameTree1(TreeNode p,TreeNode q) {
		// p and q are both null
		if (p == null && q == null) {
			return true;
		}
		// one of p and q is null
		if (q == null || p == null) {
			return false;
		}
		if (p.val != q.val) {
			return false;
		}
		return isSameTree1(p.right,q.right) && isSameTree1(p.left,q.left);
	}

	public boolean check(TreeNode p,TreeNode q) {
		// p and q are null
		if (p == null && q == null) {
			return true;
		}
		// one of p and q is null
		if (q == null || p == null) {
			return false;
		}
		if (p.val != q.val) {
			return false;
		}
		return true;
	}

	public boolean isSameTree2(TreeNode p,TreeNode q) {
		if (p == null && q == null) {
			return true;
		}
		if (!check(p,q)) {
			return false;
		}

		// init deques
		arraydeque<TreeNode> deqP = new arraydeque<TreeNode>();
		arraydeque<TreeNode> deqQ = new arraydeque<TreeNode>();
		deqP.addLast(p);
		deqQ.addLast(q);

		while (!deqP.isEmpty()) {
			p = deqP.removeFirst();
			q = deqQ.removeFirst();

			if (!check(p,q)) {
				return false;
			}
			if (p != null) {
				// in Java nulls are not allowed in Deque
				if (!check(p.left,q.left)) {
					return false;
				}
				if (p.left != null) {
					deqP.addLast(p.left);
					deqQ.addLast(q.left);
				}
				if (!check(p.right,q.right)) {
					return false;
				}
				if (p.right != null) {
					deqP.addLast(p.right);
					deqQ.addLast(q.right);
				}
			}
		}
		return true;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐