101.Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
----------------------------------------------------------------------------------------------------------
题目意思就是判断一颗二叉树是不是对称的。
由于我对二叉树现在是在重新复习阶段,所以不是很熟悉,想了很久。
最后想起看视频的时候有个层次遍历。
于是,从左边层次遍历一次,再从右边层次遍历一次,判断两次层次遍历是否相等。
所以,现在就是如何层次遍历。
层次遍历的方法是用队列。首先把根节点压入队列,然后弹出,如果根节点左子树有,压入,右子树有,压入,反复这样判断。
最后代码:
1 bool isSymmetric(TreeNode* root) 2 { 3 if(root == nullptr) //如果根节点为空,那么肯定也是对称 4 return true; 5 queue<TreeNode*> q1; 6 queue<TreeNode*> q2; 7 TreeNode* l; 8 TreeNode* r; 9 q1.push(root); //先压入根节点 10 q2.push(root); 11 while (!q1.empty() && !q2.empty()) //当队列中没有元素了 12 { 13 l = q1.front(); //在弹出之前保存元素 14 r = q2.front(); 15 q1.pop(); 16 q2.pop(); 17 if((l == nullptr) && (r == nullptr)) //如果都为空,就继续 18 continue; 19 if(((l != nullptr) && (r == nullptr)) || ((l == nullptr) && (r != nullptr))) 20 //两者只有一个为空,就不是对称 21 return false; 22 if(l->val != r->val) //比较val 23 return false; 24 q1.push(l->left); //压入左孩子 25 q1.push(l->right); //压入右孩子 26 q2.push(r->right); 27 q2.push(r->left); 28 } 29 return true; 30 }