题解 | #对称的二叉树#
对称的二叉树
http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
争取每一题都记录。
树很容易就想到递归,针对本题,对称的二叉树,左右对称,那么左右子树高度一致,且各个结点也是对称的。那么我们不妨用递归遍历。
确定递归截止条件:
左右结点大小不一样,左右结点一个是叶子结点,另一个不是。不到截止条件,递归继续。
代码:
class Solution {
private:
int flag = 1;
public:
bool isSymmetrical(TreeNode* pRoot) {
if(!pRoot) return true;
if(pRoot->left && pRoot->right)
recur(pRoot->left,pRoot->right);
if(flag == 1)
return true;
return false;
}
void recur(TreeNode* l, TreeNode* r){
if(!l && !r) return;
if(!l || !r){
flag = 0;
return;
}
if(l->val != r->val){
flag = 0;
return;
}
recur(l->left,r->right);
recur(l->right,r->left);
return;
}
};
查看4道真题和解析