LeetCode:Same Tree

Symmetric Tree思路一样,使用Map保存节点,key是节点在所在层索引,value是节点TreeNode.

package leetcode;

import java.util.HashMap;
import java.util.Map;

public class SameTree {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TreeNode node = new TreeNode(0);
		//node.left = new TreeNode(2);
		//node.right = new TreeNode(2);
		
		TreeNode node2 = new TreeNode(1);
		//node2.left = new TreeNode(2);
		
		SameTree s = new SameTree();
		System.out.println(s.isSameTree(node, node2));

	}
	
	public boolean isSameTree(TreeNode p, TreeNode q) {
		if (p == null && q != null) {
			return false;
		}
		if (p != null && q == null) {
			return false;
		}
		if (p == null && q == null) {
			return true;
		}
		
		if (p.val != q.val ) {
			return false;
		}
		
		Map<Integer, TreeNode> father1 = new HashMap<Integer, TreeNode>();
		Map<Integer, TreeNode> child1 = new HashMap<Integer, TreeNode>();
		father1.put(0, p);
		Map<Integer, TreeNode> father2 = new HashMap<Integer, TreeNode>();
		Map<Integer, TreeNode> child2 = new HashMap<Integer, TreeNode>();
		father2.put(0, q);
		
		while (true) {
			child1.clear();
			for (Integer key : father1.keySet()) {
				TreeNode node = father1.get(key);
				
				if (node.left != null) {
					child1.put(key * 2 + 0, node.left);
				}
				if (node.right != null) {
					child1.put(key * 2 + 1, node.right);
				}
			}
			
			child2.clear();
			for (Integer key : father2.keySet()) {
				TreeNode node = father2.get(key);
				
				if (node.left != null) {
					child2.put(key * 2 + 0, node.left);
				}
				if (node.right != null) {
					child2.put(key * 2 + 1, node.right);
				}
			}
			
			if (child1.isEmpty() && child2.isEmpty()) {
				break;
			} else {
				if (child1.isEmpty() && !child2.isEmpty()) {
					return false;
				} else if (!child1.isEmpty() && child2.isEmpty()) {
					return false;
				}
			}
			
			for (Integer index : child1.keySet()) {
				TreeNode node1 = child1.get(index);
				TreeNode node2 = child2.get(index);
				if (node2 == null || node2.val != node1.val) {
					return false;
				}
			}
			
			Map<Integer, TreeNode> temp = father1;
			father1 = child1;
			child1 = temp;

			temp = father2;
			father2 = child2;
			child2 = temp;
		}
		
		return true;
        
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值