`
473687880
  • 浏览: 485518 次
文章分类
社区版块
存档分类
最新评论

Symmetric Tree @LeetCode

 
阅读更多
/**
 * Symmetric Tree
 * 
 * Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3
But the following is not:
    1
   / \
  2   2
   \   \
   3    3
Note:
Bonus points if you could solve it both recursively and iteratively.

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:
   1
  / \
 2   3
    /
   4
    \
     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
 * */
public class S101 {

	public static void main(String[] args) {
		TreeNode n1 = new TreeNode(1);
		TreeNode n2 = new TreeNode(2);
		TreeNode n3 = new TreeNode(2);
		n1.left = n2;
		n1.right = n3;
		TreeNode n4 = new TreeNode(3);
		TreeNode n5 = new TreeNode(3);
		n2.right = n4;
		n3.left = n5;
		
		System.out.println(isSymmetric(n1));
	}

	public static boolean isSymmetric(TreeNode root) {
		// 不用继续比较了
		if(root == null){
			return true;
		}
		
		return isSymmetricRec(root.left, root.right);
    }
	
	// 比较一个树是不是对称树比较难写递归,所以改写成比较两个树是否对称树
	private static boolean isSymmetricRec(TreeNode t1, TreeNode t2){
		// 如果同时为空,则相等  
		if(t1==null && t2==null){
			return true;
		}else if(t1==null || t2==null){		// 如果一个空一个不空,则不等  
			return false;
		}
		
		// 根节点的值必须要相等!
		if(t1.val != t2.val){
			return false;
		}
		
		// 原来我这里还这样写,但是这有两个问题,
		// 一个是如果Java比较对象,即使里面是同样的值,如果非引用同一对象,则还是不一样!
		// 所以要区分是否为null的情况,比较麻烦!
		// 另一点是根本没必要做这个比较,因为递归会处理好!
		// 总结:只要写base case(没有节点或者只有一个节点)就够了,无需在base case里面
		// 处理更复杂的case,更复杂的在下面的return递归里写!
		/*
		if(t1.left != t2.right || t1.right!=t2.left){
			return false;
		}
		*/
		
		// 对称树的本质
		return isSymmetricRec(t1.left, t2.right) && isSymmetricRec(t1.right, t2.left);
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics