LeetCode 101.Symmetric Tree (對稱二叉樹)
阿新 • • 發佈:2018-12-12
題目描述:
給定一個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [1,2,2,3,4,4,3]
是對稱的。
1 / \ 2 2 / \ / \ 3 4 4 3
但是下面這個 [1,2,2,null,3,null,3]
則不是映象對稱的:
1 / \ 2 2 \ \ 3 3
說明:
如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。
AC C++ Solution:
使用佇列或者棧都可以解決這個問題
佇列:
/** * 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) { TreeNode *left, *right; if(!root) return true; queue<TreeNode*> q1,q2; q1.push(root->left); q2.push(root->right); while(!q1.empty() && !q2.empty()) { left = q1.front(); q1.pop(); right = q2.front(); q2.pop(); if(NULL == left && NULL == right) continue; if(NULL == left || NULL == right) return false; if(left->val != right->val) return false; q1.push(left->left); q1.push(left->right); q2.push(right->right); q2.push(right->left); } return true; } };
棧:
/** * 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) { TreeNode *left, *right; if(!root) return true; stack<TreeNode*> q1,q2; q1.push(root->left); q2.push(root->right); while(!q1.empty() && !q2.empty()) { left = q1.top(); q1.pop(); right = q2.top(); q2.pop(); if(NULL == left && NULL == right) continue; if(NULL == left || NULL == right) return false; if(left->val != right->val) return false; q1.push(left->left); q1.push(left->right); q2.push(right->right); q2.push(right->left); } return true; } };