• 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,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
    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));
    		System.out.println(isSameTree2(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));
    		System.out.println(isSameTree2(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;
    	}
    }
    
  • 相关阅读:
    ORACLE之ora01722和ORA01403的错误测试
    数据库事务的简单学习(一)
    oracle在线重定义(一)
    数据库拆表拆库的常用策略和PL/SQL代码经验谈(zt)
    如何杀掉Oracle的Session
    异步电机参数辨识
    如何下载专利
    电涡流测功机
    Matlab/Simulink 环境下的车用永磁电机系统仿真
    基本放大器电路,希望对各位有用。[转]
  • 原文地址:https://www.cnblogs.com/denggelin/p/11601193.html
Copyright © 2020-2023  润新知