剑指offer 对称的二叉树
题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:如果这颗二叉树是空的,那么返回true,否则判断此二叉树的左右子树是不是相同的。
递归代码如下:
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 bool isSymmetrical(TreeNode* pRoot){ 14 if (pRoot == NULL) { 15 return true; 16 } 17 return isSame(pRoot->left, pRoot->right); 18 } 19 20 private: 21 bool isSame(TreeNode *left, TreeNode *right) { 22 //如果左右树都为空,那么返回true; 23 if (left == NULL && right == NULL) { 24 return true; 25 } 26 // 如果左右树都不为空,那么要满足左树的左子树与右树的右子树相同, 27 // 左树的右子树与右树的左子树相同,并且根节点的值要相同 (先判断根节点值是否相同最好,因为&&的存在) 28 if (left && right) { 29 return (left->val == right->val) && isSame(left->left, right->right) && isSame(left->right, right->left); 30 } 31 //其他情况返回false; 32 return false; 33 } 34 };
非递归代码:
越努力,越幸运