朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!
数据结构与算法专栏:数据结构与算法
个 人 主 页 :stackY、
C 语 言 专 栏:C语言:从入门到精通
LeetCode--101.对称二叉树: https://leetcode.cn/problems/symmetric-tree/
目录
1.题目介绍
给你一个二叉树的根节点
root
, 检查它是否轴对称。
2.实例演示
3.解题思路
题目分析:
判断一颗二叉树是否为轴对称二叉树,在这里就要注意一个比较类似的点--判断一个二叉树的左右子树是否相等,这两个问题有很多相似的地方,我们可以画图来看一看:
可以看到二者大同小异,轴对称问题转换到二叉树中就是一个根节点的左右子树中左子树的左根节点等有右子树的右根节点,然后将都转化为根、左子树、右子树的子问题。
根据提示二叉树的结点个数至少有一个,因此我们可以直接来访问左右子树,因此为了方便,我们可以设置一个子函数,这个判断的过程在这个子函数中完成,所以只需要将左右子树传递给子函数即可,那么在子函数里面我们首先就要判断传过来的左右子树是否为空,若都为空,则满足轴对称条件,若只有一个为空,那么则不满足,如果都不为空,那么就需要判断它们两个结点是否相等,如果不相等,那么则不满足条件,如果相等,就继续递归遍历它的左右子树,直到遍历完整颗二叉树。
代码演示:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool _isSymmetric(struct TreeNode* left_root, struct TreeNode* right_root) { //左右子树都为空,则表示对称 if(left_root == NULL && right_root == NULL) { return true; } //若有一个不为空,则不对称 if(left_root == NULL || right_root == NULL) { return false; } //都不为空则判断是否满足轴对称的特点 if(left_root->val != right_root->val) { return false; } //递归继续遍历左右子树 return _isSymmetric(left_root->left, right_root->right) && _isSymmetric(left_root->right, right_root->left); } bool isSymmetric(struct TreeNode* root){ //分装子函数来判断 return _isSymmetric(root->left, root->right); }
朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!