目录
1:题目分析及思路
2:代码实现和分析
1:代码
2:分析
1:题目分析及思路
这里我们有一个二叉树的根节点 root
, 检查它是否轴对称。
思路: 如上图,示例1是一颗对称的二叉树,示例2是一颗不对称的二叉树,那么我们该如何判断二叉树根节点root虚线左右部分是否相等呢?(虚线从根节点对二叉树进行了对半分,我们要判断跟节点左部分和右部分的值的位置和左右子树都相等并且对称)
1:我们要判断根节点root左边的节点的值是否相同;
2:我们还要判断跟节点root左右节点的根的左右子树是否完全相同;
如果满足以上的两个要求我们就可以得出上图两颗树是相同的树;
2:代码实现和分析
1:代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
//对称二叉树bool _isSymmetric(struct TreeNode* p, struct TreeNode* q){if(p == NULL && q == NULL)return true;if(p == NULL || q == NULL)return false;if(p->val != q->val)return false;return _isSymmetric(p->left,q->right)&& _isSymmetric(p->right,q->left);}
bool isSymmetric(struct TreeNode* root) {if(root == NULL)return true;return _isSymmetric(root->left,root->right);
}
2:分析
我们在isSymmetric中调用一下_isSymmetric函数,这里的_isSymmetric函数就是判断两颗二叉树是否相同的逻辑,所以我们这里直接套用一下;
一:首先我们分析一下isSymmetric函数内部:
1):我们判断树是否是空(NULL)树,如果是空就说明对称,返回true;
然后我们对_isSymmetric函数进行递归调用,这里我们对_isSymmetric函数进行分析
二:对_isSymmetric函数进行分析:
p指针和q指针分别指向根节点root节点的左子树和右子树
1):首先我们要判断这颗树是否是空树,如果树都是空树,我们就直接返回true
2):第二步,这里我们直接判断 当p(左子树)为NULL时,或者q(右子树)为NULL时,就说明他们不相等;(这一步如果不理解的话可以结合上面的例图进行查看)
3):第三步,我们直接判断 p->val != q->val,如果p的值不等于q的值,说明左子树的值不等于右子树的值
4):最后,进行递归调用,判断好一层后继续向下一层进行判断,直到将树的所有节点都判断完毕
以上就是二叉处OJ——对称二叉树的所有分析和理解了,创作不易,求求大家点个小赞赞,感谢各位老们的赏脸观看,随手点个赞,养成好习惯,如有问题,感谢反馈!