【问题】如题目
output : true
output : false
【code】
bool isSymmetricHelper(TreeNode *rnode, TreeNode *lnode) {
if ((lnode || rnode) == NULL)
return true;
if ((lnode && rnode) == NULL)
return false;
if (lnode->val == rnode->val)
return isSymmetricHelper(lnode->left, rnode->right) &&
isSymmetricHelper(lnode->right, rnode->left);
else
return false;
}
bool isSymmetric(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (root == NULL)
return true;
return isSymmetricHelper(root->right, root->left);
}
大牛们非递归的方法如下,实际上是模拟递归的思路,先建立两个栈,分别存放左子树和右子树
bool isSymmetric(TreeNode *root) {
if(root == NULL) return true;
queue<TreeNode *> lf, rt;
lf.push(root->left);
rt.push(root->right);
TreeNode *l, *r;
while(!lf.empty() && !rt.empty()) {
l = lf.front(); r = rt.front();
lf.pop(); rt.pop();
if(l == NULL && r == NULL) continue;
if(l == NULL || r == NULL) return false;
if(l->val != r->val) return false;
lf.push(l->left); lf.push(l->right);
rt.push(r->right); rt.push(r->left);
}
if(lf.empty() && rt.empty()) return true;
else return false;
}