二叉樹 Leetcode 101 對稱二叉樹
Leetcode 101
要點:1.比較的是左右子樹是否相同,不是節點的左右孩子;
2.左子樹左右中遍歷,右子樹右左中遍歷;
3.靈活遞歸。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:// 1.確定遞歸參數和返回值bool compare(TreeNode* left, TreeNode* right){// 2.確定終止條件if(left == nullptr && right != nullptr) return false;else if(left != nullptr && right == nullptr) return false;else if(left == nullptr && right == nullptr) return true;else if(left->val != right->val) return false;// 3.單次遞歸邏輯bool out = compare(left->left, right->right);bool in = compare(left->right, right->left);bool isSame = out && in;return isSame;}bool isSymmetric(TreeNode* root) {if(root->left == nullptr && root->right != nullptr){return false;}else if(root->left != nullptr && root->right == nullptr){return false;}return compare(root->left, root->right); }
};