LeetCode101——對稱二叉樹——c++版本實現
阿新 • • 發佈:2018-12-14
題面來啦~
給定一個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹
[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
/** * 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) {
} };
如果還沒有看我的前一篇Leetcode100的朋友請先去看那篇哦~ 強烈建議先100後101,101這道題可以有效檢驗你是否學會了如100這種二叉樹的遞迴操作思想!
如果看過了100的話,我們就開始講解啦~
其實思路很簡單,根據映象的定義,不過是在遍歷的時候設定兩個指標,一個向左一個向右同時遍歷,並逐步比對。
但我們發現這道題的函式只有根節點,那帶一個雙參的子函式就可以完美解決啦~ 下面給出程式碼哦
要注意的是,根節點的子節點情況我選擇在原始函式中給出判斷,這樣方便子函式安安心心的往下遍歷~
class Solution { public: bool search(TreeNode* r1,TreeNode* r2) { if(r1&&r2) return r1->val==r2->val&&search(r1->left,r2->right)&&search(r1->right,r2->left); else if((r1&&!r2)||(!r1&&r2)) return false; else return true; } bool isSymmetric(TreeNode* root) { if(!root) return true; if(!root->left&&!root->right) return true; if((!root->left&&root->right)||(root->left&&!root->right)) return false; return search(root->left,root->right); } };