classSolution { public: boolisSymmetric(TreeNode* root){ if(root == NULL) returntrue; // An empty tree is symmetric queue<TreeNode*> q; q.push(root->left); q.push(root->right); while (!q.empty()){ TreeNode* left = q.front(); q.pop(); TreeNode* right = q.front(); q.pop(); if(left == NULL && right == NULL) continue; // Both are NULL, symmetric at this level if(left ==NULLor right==NULL) returnfalse; // One is NULL and the other is not, not symmetric if(left->val != right->val) returnfalse; // Values differ, not symmetric // Enqueue children in the order to compare them as mirror images q.push(left->left); q.push(right->right); q.push(left->right); q.push(right->left); } returntrue; // tree is symmetric } };
這裡首先將左右 child push 進 queue
接著當 queue不為空的時候就會開始進行一系列操作:
首先透過 left 和 right 指標來指向剛剛放入queue的左右節點
接著就是比較,如果其中一個為null,那就是tree結構不對稱
如果都是 null,就代表到目前為止是對稱的,繼續往下執行
如果都不為null,就去比較左右節點的資料值 val,如果不一樣回傳 false
接著依序將left child 的 left child 放入 queue
再將 right child 的 right child 放入 queue,可以看題目的範例圖,其中一對需要比較對稱的位置就是這
將 left child 的 right child 放入 queue
再將 right child 的 left child 放入 queue,可以看題目的範例圖,其中一對需要比較對稱的位置就是這