C++ 判断一棵二叉树是否对称

本文探讨如何使用C++判断一棵二叉树是否对称,重点在于理解对称性的定义,即左右子树翻转后顶点及其值一一对应。通过实例代码解析,帮助理解算法思路,并提醒在比较时要注意节点值的相等性。

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

         一棵二叉树对称,就是说它如果以根为轴,翻转过去一样,如下图所示,以虚线为轴,把左边翻转到右边,各顶点及顶点中的值一一对应。


        注意,它并不要求单独看子树的时候子树也是对称的,如下图,单独看左子树时,左子树是不对称的,单独看右子树时,右子树也是不对称的,但这棵本身是对称的。


      要判断一棵二叉树是否对称,那就是判断它的左子树翻转过去是否和右子树一样,注意这里的“一样”包括了值也一样。

<
### C++ 实现判断二叉树是否对称C++中,可以通过递归方法来检查一棵二叉树是否对称的。具体来说,可以定义一个辅助函数`isMirror`用于比较两棵子树是否互为镜像。 #### 定义节点结构体 为了表示二叉树中的节点,通常会先定义一个简单的节点类或结构体: ```cpp struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; ``` #### 判断两个子树是否互为镜像 编写一个名为 `isMirror` 的私有成员函数,该函数接收两个参数并返回布尔值,指示这两个子树是否构成彼此的镜像关系[^1]。 ```cpp bool isMirror(TreeNode* t1, TreeNode* t2) { if (t1 == nullptr && t2 == nullptr) return true; // 如果两者都为空,则它们是镜子图像 if (t1 == nullptr || t2 == nullptr) return false;// 只有一个为空则不是镜子图像 // 当前结点相等,并且左子树等于右子树,以及右子树等于左子树时才成立 return (t1->val == t2->val) && isMirror(t1->right, t2->left) && isMirror(t1->left, t2->right); } ``` #### 主要接口函数 最后提供公共接口`isSymmetric`给外部调用者使用,此函数仅需传入根节点即可完成整个过程: ```cpp class Solution { public: bool isSymmetric(TreeNode* root) { return root==nullptr || isMirror(root->left,root->right); } private: bool isMirror(TreeNode* t1, TreeNode* t2){ ... } }; ``` 通过上述代码片段可以看出,在处理每一层上的对应位置处进行对比操作,从而实现了对于整棵树形状特征的有效验证[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值