华为2020届软件开发二面代码题

本文介绍了一种通过递归算法判断二叉树是否为镜像对称的方法。镜像对称意味着树从根节点切割后,左右子树在结构上完全对称。文章详细阐述了递归判断过程,包括比较左右子树的值,以及子树间子节点的镜像对称性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何判断一棵树是否为镜像?

镜像是指从根节点竖直向下切割,左右镜像对称。

在这里插入图片描述

递归:
一棵树是镜像的,那么它的左右子树肯定是镜像的。

左右子树要满足镜像,必须满足:

  1. 左右子树的值相等。
  2. 左子树的右子树与右子树的左子树镜像。
  3. 左子树的左子树与右子树的右子树镜像。

满足以上条件即可,利用递归判断。

typedef int ElementType;
class BinaryTree
{
public:
	ElementType Val;
	BinaryTree* LeftChild;
	BinaryTree* RightChild;
	BinaryTree(ElementType val = 0)
	{
		Val = val;
		LeftChild = NULL;
		RightChild = NULL;
	}

	bool isMirror(const BinaryTree* BT)
	{
		return isMirrorLeftRight(BT->LeftChild, BT->RightChild);
	}

	bool isMirrorLeftRight(const BinaryTree* LeftChild, const BinaryTree* RightChild)
	{
		if (LeftChild == NULL && RightChild == NULL)
			return true;
		else if (LeftChild == NULL || RightChild == NULL)
			return false;
		else
		{
			if (LeftChild->Val != RightChild->Val)
				return false;
			else
				return (isMirrorLeftRight(LeftChild->LeftChild, RightChild->RightChild) && isMirrorLeftRight(LeftChild->RightChild, RightChild->LeftChild));
		}
	}
};

信息来自同实验室应届硕士毕业生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值