題目:
給你一個二叉樹的根節點?root
?, 檢查它是否軸對稱。
方法:本體可以用遞歸和迭代兩種方法,但我更喜歡迭代的方式,因此使用迭代的方式做一下。首先我們分析一下不對稱的情況。因為對稱的情況很簡單,即兩個節點相等,同時為空或者是同時不為空且數值相等。不對稱的情況可能有以下幾種:一邊為空,另一邊不為空;兩邊都不為空但數值不相等。因此我們可以將需要比對的節點按照順序放入隊列中,并用樹的節點指針取出需要比對的節點,依次按照我們上面描述的幾種情況判斷是否對稱,隨后將左子樹的左節點,右子樹的右節點,左子樹的右節點和右子樹的左節點按照順序放入隊列中,等待著進行下一輪的比對。
題解:
class Solution {
public:bool isSymmetric(TreeNode* root) {if(root == NULL) return true; //根節點為空是對稱的queue<TreeNode*> que;que.push(root->left); //根的左子樹入隊que.push(root->right); //根的右子樹入隊while(!que.empty()){TreeNode* leftNode = que.front(); que.pop();TreeNode* rightNode = que.front(); que.pop();if (!leftNode && !rightNode) { //左右節點同時為空,算對稱的continue;}if((!leftNode || !rightNode || (leftNode->val != rightNode->val))){return false;}que.push(leftNode->left); //左子樹的左節點que.push(rightNode->right); //右子樹的右節點que.push(leftNode->right); //左子樹的右節點que.push(rightNode->left); //右子樹的左節點}return true;}
};
?