前言
本文将围绕以下问题展开讨论
如何求解对称二叉树问题(检验一个二叉树的左右两侧是否是轴对称的)?
本文将采用两种方法 【递归】【迭代】解决此问题(文章末尾附完整代码)
一、如何理解对称二叉树
题目链接:[点击跳转] Leetcode 101. 对称二叉树
如下是具体题目要求:

仔细分析题目后我们发现,一个对称的二叉树,需要满足几个条件:
1.结构对称,如果一个树中只有一个节点,或者是一个空树,那么也应该是对称的。
2.对应节点元素相等。
所以只要满足上述的要求,我们就可以解决这道题啦!
二、方法一(递归法)
这道题的本质是检验一个二叉树是否是对称的,那么毋庸置疑,核心内容应该是不断的去做一个比对、对照,去判断是否满足前面提到的两个条件。
我们首先定义一个函数isSymmetric,通过传入根节点,就可以判断true/false。
bool isSymmetric(TreeNode* root) {
return ;
}
现在我们该考虑如何在只给出根节点的情况下,判断子节点的对称性?于是,我们想到了递归法,定义一个递归函数,传入根节点左右两侧的子节点,返回true or false。
bool digui(TreeNode* A,TreeNode* B){
return //true or false
}
如果传入的两个子节点为空呢?
那么我们就直接返回true,因为两侧都是空的,也是对称的一种形式呀!
bool digui(TreeNode* A,TreeNode* B){
if(A==nullptr&&B==nullptr){
return true;
}
return //true or false
}
如果传入的两个子节点中只有一个为空呢?
那么我们返回false。
bool digui(TreeNode* A,TreeNode* B){
if(A==nullptr&&B==nullptr){
return true;
}
else if((A==nullptr&&B!=nullptr)||(B==nullptr&&A!=nullptr)){
return false;
}
return //true or false
}
好了,到这里时我们已经解决了结构对称的问题,接下来需要考虑传入的这两个节点是否相等,以及这两个节点下面的节点又是否对称。
如果传入的这两个节点相等,并且它们的子树还对称,那么就可以认为这是一个对称二叉树了。
bool digui(TreeNode* A,TreeNode* B){
if(A

最低0.47元/天 解锁文章
1143

被折叠的 条评论
为什么被折叠?



