Symmetric Tree
方法一:使用非递归的方式,基于前序遍历的方法,与sametree方法的不同在于symmetric需要一个从做节点遍历,一个从右节点遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { stack<TreeNode *> s; s.push(root); s.push(root); while(!s.empty()) { TreeNode *left = s.top(); s.pop(); TreeNode *right = s.top(); s.pop(); if(!left && !right) continue; if(!left || !right) return false; if(left->val == right->val) { s.push(left->right); s.push(right->left); s.push(left->left); s.push(right->right); } else return false; } return true; } };
方法二:使用递归的方法,与sametree方法类似
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { return symmetric(root, root); } bool symmetric(TreeNode *p ,TreeNode *q) { if(!p && !q) return true; if(!p || !q) return false; return (p->val == q->val) && symmetric(p->left, q->right) && symmetric(p->right, q->left); } };

浙公网安备 33010602011771号