@@ -3,6 +3,7 @@ https://leetcode-cn.com/problems/symmetric-tree/
33
44## 思路
55
6+ 这是考察二叉树基本操作的经典题目,递归的方式相对好理解一些,迭代的方法 我看大家清一色使用队列,其实使用栈也是可以的,只不过遍历的顺序不同而已,关键是要理解只要是对称比较就可以了,遍历的顺序无所谓的。
67
78## C++代码
89
@@ -28,5 +29,64 @@ public:
2829
2930### 迭代
3031
32+ 使用队列
33+
34+ ```
35+ class Solution {
36+ public:
37+ bool isSymmetric(TreeNode* root) {
38+ if (root == NULL) return true;
39+ queue<TreeNode*> que;
40+ que.push(root->left);
41+ que.push(root->right);
42+ while (!que.empty()) {
43+ TreeNode* leftNode = que.front(); que.pop();
44+ TreeNode* rightNode = que.front(); que.pop();
45+ if (!leftNode && !rightNode) {
46+ continue;
47+ }
48+ if ((!leftNode || !rightNode || (leftNode->val != rightNode->val))) {
49+ return false;
50+ }
51+ que.push(leftNode->left);
52+ que.push(rightNode->right);
53+ que.push(leftNode->right);
54+ que.push(rightNode->left);
55+ }
56+ return true;
57+ }
58+ };
59+
60+ ```
61+
62+ 使用栈
63+
64+ ```
65+ class Solution {
66+ public:
67+ bool isSymmetric(TreeNode* root) {
68+ if (root == NULL) return true;
69+ stack<TreeNode*> st;
70+ st.push(root->left);
71+ st.push(root->right);
72+ while (!st.empty()) {
73+ TreeNode* leftNode = st.top(); st.pop();
74+ TreeNode* rightNode = st.top(); st.pop();
75+ if (!leftNode && !rightNode) {
76+ continue;
77+ }
78+ if ((!leftNode || !rightNode || (leftNode->val != rightNode->val))) {
79+ return false;
80+ }
81+ st.push(leftNode->left);
82+ st.push(rightNode->right);
83+ st.push(leftNode->right);
84+ st.push(rightNode->left);
85+ }
86+ return true;
87+ }
88+ };
89+ ```
90+
3191
3292> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
0 commit comments