[牛客算法总结]:对应二叉树

标签:

树、递归、队列

题目:

给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如: 下面这棵二叉树是对称的
请添加图片描述
下面这棵二叉树不对称
请添加图片描述
数据范围:节点数满足 0 ≤n≤1000,节点上的值满足val∣≤1000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
备注:
你可以用递归和迭代两种方法解决这个问题。

反思:

这道题目我在思考的时候想到了如何解决,但可能是由于接触到树的知识点并不多,所以知道用什么知识点来解决,但是在写代码的时候写不出来,迷迷糊糊,不知道可以将该传进来的参数再复制一份,由于是完全对称的(镜像),所以我们一份使用根左右来遍历,一份可以使用根右左来遍历。然后再方法中判断相同或者不同的条件即可。
另外至于使用队列来解决这道题目的时候,思路也是差不多的,一定要多做一做这种题目才可以应对其他的题目。

用到的知识点:

树、递归、队列

代码:

递归:

	// 递归的方式
	boolean recur(TreeNode pRoot1, TreeNode pRoot2){
		if (pRoot1 == null && pRoot2 == null) {
			return true;
		}
		if (pRoot1 == null || pRoot2 == null || pRoot1.val != pRoot2.val) {
			return false;
		}
		return recur(pRoot1.left,pRoot2.right) && recur(pRoot1.right,pRoot2.left  );
	}
	boolean isSymmetrical(TreeNode pRoot) {
		return recur(pRoot,pRoot);
	}

队列

	// 队列
	boolean isSymmetrical2(TreeNode pRoot) {
		if (pRoot == null) {
			return true;
		}
		Queue<TreeNode> q1 = new LinkedList<>();
		Queue<TreeNode> q2 = new LinkedList<>();
		q1.offer(pRoot.left);
		q2.offer(pRoot.right);
		while (!q1.isEmpty() && !q2.isEmpty()) {
			TreeNode poll1 = q1.poll();
			TreeNode poll2 = q2.poll();
			if (poll1 == null && poll2 == null) {
				continue;
			}
			if (poll1 == null || poll2 == null || poll1.val != poll2.val) {
				return false;
			}
			q1.offer(poll1.left);
			q1.offer(poll1.right);

			q2.offer(poll2.right);
			q2.offer(poll2.left);
		}
		return true;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值