[leetcode]Symmetric Tree

136 篇文章 0 订阅
117 篇文章 0 订阅

这个方法略2,新博文地址:[leetcode]Symmetric Tree

http://oj.leetcode.com/problems/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.

 判断树是否是对称的。要求用递归和循环实现。

我对这道题大概有三种思想:

1.  层次遍历,判断每一层是否是对称的(循环思想)

2. 生成该树的镜像,判断是否跟其镜像相同(麻烦点,树的镜像和判断两棵树是否相同两个知识点)

3. 递归实现(网上基本上都是递归算法,代码我也懒得写了,直接粘过来了)

我写的是层次遍历的思想,比较直观,但是代码比较乱

   public boolean isSymmetric(TreeNode root) {
		if (root == null) {
			return true;
		}
		Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
		queue.offer(root);
		int numCount = 1;//表示当前层的节点数
		while (!queue.isEmpty()) {
			String[] sList = new String[numCount * 2];//存储该层的节点val
			int index = 0;
			int levelNodeCount = 0;//临时变量,记录下一层的节点数
			for (int i = 0; i < numCount; i++) {
				TreeNode node = queue.poll();
				if (node.left != null) {
					queue.offer(node.left);
					levelNodeCount++;
					sList[index++] = String.valueOf(node.left.val);
				} else {
					sList[index++] = "#";
				}
				if (node.right != null) {
					queue.offer(node.right);
					levelNodeCount++;
					sList[index++] = String.valueOf(node.right.val);
				} else {
					sList[index++] = "#";
				}
			}
			numCount = levelNodeCount;
			index --;//sList的长度
			for(int i = 0; i <= index /2; i++){//判断该层节点是否对称
				if(!sList[i].equals(sList[index - i])){
					return false;
				}
			}
		}
		return true;
	}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值