101. 對稱二叉樹
阿新 • • 發佈:2018-12-09
題目
程式碼
/** * 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 isMirror(root,root); list<TreeNode*> que; que.push_back(root); que.push_back(root); while(que.empty()==false) { auto t1=que.front(); que.pop_front(); auto t2=que.front(); que.pop_front(); if (t1 == nullptr && t2 == nullptr) continue; if (t1 == nullptr || t2 == nullptr) return false; if (t1->val != t2->val) return false; que.push_back(t1->left); que.push_back(t2->right); que.push_back(t1->right); que.push_back(t2->left); } return true; } //這是遞迴的方法 // bool isMirror(TreeNode* left,TreeNode* right) // { // if(left==nullptr&&right==nullptr) return true; // if(left==nullptr||right==nullptr) return false; // return (left->val==right->val)&&isMirror(left->right,right->left)&&isMirror(left->left,right->right); // } };
思路
迭代的方法,用list儲存值,每次壓入兩個節點的左孩子和右孩子,取出的時候進行判斷即可;遞迴的方法每次放入的是節點的左邊對應另一個節點的右邊。