Skip to content

Commit a483dd4

Browse files
committed
feat: update solutions to lc problem: No.0101
No.0101.Symmetric Tree
1 parent 52b15f3 commit a483dd4

File tree

8 files changed

+203
-153
lines changed

8 files changed

+203
-153
lines changed

solution/0100-0199/0101.Symmetric Tree/README.md

+67-60
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,20 @@
4949
```python
5050
# Definition for a binary tree node.
5151
# class TreeNode:
52-
# def __init__(self, x):
53-
# self.val = x
54-
# self.left = None
55-
# self.right = None
56-
52+
# def __init__(self, val=0, left=None, right=None):
53+
# self.val = val
54+
# self.left = left
55+
# self.right = right
5756
class Solution:
5857
def isSymmetric(self, root: TreeNode) -> bool:
59-
if root is None:
60-
return True
61-
return self.is_symmetric(root.left, root.right)
62-
63-
def is_symmetric(self, left: TreeNode, right: TreeNode) -> bool:
64-
if left is None and right is None:
65-
return True
66-
if left is None or right is None or left.val != right.val:
67-
return False
68-
return self.is_symmetric(left.left, right.right) and self.is_symmetric(left.right, right.left)
58+
def dfs(root1, root2):
59+
if root1 is None and root2 is None:
60+
return True
61+
if root1 is None or root2 is None or root1.val != root2.val:
62+
return False
63+
return dfs(root1.left, root2.right) and dfs(root1.right, root2.left)
64+
65+
return dfs(root, root)
6966
```
7067

7168
### **Java**
@@ -79,79 +76,86 @@ class Solution:
7976
* int val;
8077
* TreeNode left;
8178
* TreeNode right;
82-
* TreeNode(int x) { val = x; }
79+
* TreeNode() {}
80+
* TreeNode(int val) { this.val = val; }
81+
* TreeNode(int val, TreeNode left, TreeNode right) {
82+
* this.val = val;
83+
* this.left = left;
84+
* this.right = right;
85+
* }
8386
* }
8487
*/
8588
class Solution {
8689
public boolean isSymmetric(TreeNode root) {
87-
if (root == null) return true;
88-
return isSymmetric(root.left, root.right);
90+
return dfs(root, root);
8991
}
9092

91-
private boolean isSymmetric(TreeNode left, TreeNode right) {
92-
if (left == null && right == null) return true;
93-
if (left == null || right == null || left.val != right.val) return false;
94-
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
93+
private boolean dfs(TreeNode root1, TreeNode root2) {
94+
if (root1 == null && root2 == null) {
95+
return true;
96+
}
97+
if (root1 == null || root2 == null || root1.val != root2.val) {
98+
return false;
99+
}
100+
return dfs(root1.left, root2.right) && dfs(root1.right, root2.left);
95101
}
96102
}
97103
```
98104

99105
### **C++**
100106

101107
```cpp
108+
/**
109+
* Definition for a binary tree node.
110+
* struct TreeNode {
111+
* int val;
112+
* TreeNode *left;
113+
* TreeNode *right;
114+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
115+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
116+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
117+
* };
118+
*/
102119
class Solution {
103120
public:
104121
bool isSymmetric(TreeNode* root) {
105-
if (!root) return true;
106-
return isSymmetric(root->left, root->right);
122+
return dfs(root, root);
107123
}
108124

109-
private:
110-
bool isSymmetric(TreeNode* left, TreeNode* right) {
111-
if (!left && !right) return true;
112-
if (!left && right || left && !right || left->val != right->val) return false;
113-
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
125+
bool dfs(TreeNode* root1, TreeNode* root2) {
126+
if (!root1 && !root2) return 1;
127+
if (!root1 || !root2 || root1->val != root2->val) return 0;
128+
return dfs(root1->left, root2->right) && dfs(root1->right, root2->left);
114129
}
115130
};
116131
```
117132

118-
### **JavaScript**
133+
### **TypeScript**
119134

120-
```js
135+
```ts
121136
/**
122137
* Definition for a binary tree node.
123-
* function TreeNode(val) {
124-
* this.val = val;
125-
* this.left = this.right = null;
138+
* class TreeNode {
139+
* val: number
140+
* left: TreeNode | null
141+
* right: TreeNode | null
142+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
143+
* this.val = (val===undefined ? 0 : val)
144+
* this.left = (left===undefined ? null : left)
145+
* this.right = (right===undefined ? null : right)
146+
* }
126147
* }
127148
*/
128-
/**
129-
* @param {TreeNode} root
130-
* @return {number[][]}
131-
*/
132-
var levelOrder = function (root) {
133-
let result = [];
134-
if (!root) return result;
135-
136-
let queue = [];
137-
queue.push(root);
138-
while (queue.length) {
139-
let size = queue.length;
140-
let levelItems = [];
141-
while (size--) {
142-
let node = queue.shift();
143-
levelItems.push(node.val);
144-
if (node.left) {
145-
queue.push(node.left);
146-
}
147-
if (node.right) {
148-
queue.push(node.right);
149-
}
149+
150+
function isSymmetric(root: TreeNode | null): boolean {
151+
function dfs(root1, root2) {
152+
if (!root1 && !root2) return true;
153+
if (!root1 || !root2 || root1.val != root2.val) return false;
154+
return dfs(root1.left, root2.right) && dfs(root1.right, root2.left);
150155
}
151-
result.push(levelItems);
152-
}
153-
return result;
154-
};
156+
return dfs(root, root);
157+
}
158+
```
155159

156160
### **...**
157161

@@ -160,4 +164,7 @@ var levelOrder = function (root) {
160164
```
161165

162166
<!-- tabs:end -->
167+
168+
```
169+
163170
```

solution/0100-0199/0101.Symmetric Tree/README_EN.md

+71-29
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,20 @@
4141
```python
4242
# Definition for a binary tree node.
4343
# class TreeNode:
44-
# def __init__(self, x):
45-
# self.val = x
46-
# self.left = None
47-
# self.right = None
48-
44+
# def __init__(self, val=0, left=None, right=None):
45+
# self.val = val
46+
# self.left = left
47+
# self.right = right
4948
class Solution:
5049
def isSymmetric(self, root: TreeNode) -> bool:
51-
if root is None:
52-
return True
53-
return self.is_symmetric(root.left, root.right)
54-
55-
def is_symmetric(self, left: TreeNode, right: TreeNode) -> bool:
56-
if left is None and right is None:
57-
return True
58-
if left is None or right is None or left.val != right.val:
59-
return False
60-
return self.is_symmetric(left.left, right.right) and self.is_symmetric(left.right, right.left)
50+
def dfs(root1, root2):
51+
if root1 is None and root2 is None:
52+
return True
53+
if root1 is None or root2 is None or root1.val != root2.val:
54+
return False
55+
return dfs(root1.left, root2.right) and dfs(root1.right, root2.left)
56+
57+
return dfs(root, root)
6158
```
6259

6360
### **Java**
@@ -69,42 +66,87 @@ class Solution:
6966
* int val;
7067
* TreeNode left;
7168
* TreeNode right;
72-
* TreeNode(int x) { val = x; }
69+
* TreeNode() {}
70+
* TreeNode(int val) { this.val = val; }
71+
* TreeNode(int val, TreeNode left, TreeNode right) {
72+
* this.val = val;
73+
* this.left = left;
74+
* this.right = right;
75+
* }
7376
* }
7477
*/
7578
class Solution {
7679
public boolean isSymmetric(TreeNode root) {
77-
if (root == null) return true;
78-
return isSymmetric(root.left, root.right);
80+
return dfs(root, root);
7981
}
8082

81-
private boolean isSymmetric(TreeNode left, TreeNode right) {
82-
if (left == null && right == null) return true;
83-
if (left == null || right == null || left.val != right.val) return false;
84-
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
83+
private boolean dfs(TreeNode root1, TreeNode root2) {
84+
if (root1 == null && root2 == null) {
85+
return true;
86+
}
87+
if (root1 == null || root2 == null || root1.val != root2.val) {
88+
return false;
89+
}
90+
return dfs(root1.left, root2.right) && dfs(root1.right, root2.left);
8591
}
8692
}
8793
```
8894

8995
### **C++**
9096

9197
```cpp
98+
/**
99+
* Definition for a binary tree node.
100+
* struct TreeNode {
101+
* int val;
102+
* TreeNode *left;
103+
* TreeNode *right;
104+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
105+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
106+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
107+
* };
108+
*/
92109
class Solution {
93110
public:
94111
bool isSymmetric(TreeNode* root) {
95-
if (!root) return true;
96-
return isSymmetric(root->left, root->right);
112+
return dfs(root, root);
97113
}
98114

99-
private:
100-
bool isSymmetric(TreeNode* left, TreeNode* right) {
101-
if (!left && !right) return true;
102-
if (!left && right || left && !right || left->val != right->val) return false;
103-
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
115+
bool dfs(TreeNode* root1, TreeNode* root2) {
116+
if (!root1 && !root2) return 1;
117+
if (!root1 || !root2 || root1->val != root2->val) return 0;
118+
return dfs(root1->left, root2->right) && dfs(root1->right, root2->left);
104119
}
105120
};
106121
```
107122

123+
### **TypeScript**
124+
125+
```ts
126+
/**
127+
* Definition for a binary tree node.
128+
* class TreeNode {
129+
* val: number
130+
* left: TreeNode | null
131+
* right: TreeNode | null
132+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
133+
* this.val = (val===undefined ? 0 : val)
134+
* this.left = (left===undefined ? null : left)
135+
* this.right = (right===undefined ? null : right)
136+
* }
137+
* }
138+
*/
139+
140+
function isSymmetric(root: TreeNode | null): boolean {
141+
function dfs(root1, root2) {
142+
if (!root1 && !root2) return true;
143+
if (!root1 || !root2 || root1.val != root2.val) return false;
144+
return dfs(root1.left, root2.right) && dfs(root1.right, root2.left);
145+
}
146+
return dfs(root, root);
147+
}
148+
```
149+
108150
### **...**
109151

110152
```
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
112
class Solution {
213
public:
314
bool isSymmetric(TreeNode* root) {
4-
if (!root) return true;
5-
return isSymmetric(root->left, root->right);
15+
return dfs(root, root);
616
}
717

8-
private:
9-
bool isSymmetric(TreeNode* left, TreeNode* right) {
10-
if (!left && !right) return true;
11-
if (!left && right || left && !right || left->val != right->val) return false;
12-
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
18+
bool dfs(TreeNode* root1, TreeNode* root2) {
19+
if (!root1 && !root2) return 1;
20+
if (!root1 || !root2 || root1->val != root2->val) return 0;
21+
return dfs(root1->left, root2->right) && dfs(root1->right, root2->left);
1322
}
14-
};
23+
};

solution/0100-0199/0101.Symmetric Tree/Solution.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44
* int val;
55
* TreeNode left;
66
* TreeNode right;
7-
* TreeNode(int x) { val = x; }
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
814
* }
915
*/
1016
class Solution {
1117
public boolean isSymmetric(TreeNode root) {
12-
if (root == null) return true;
13-
return isSymmetric(root.left, root.right);
18+
return dfs(root, root);
1419
}
15-
16-
private boolean isSymmetric(TreeNode left, TreeNode right) {
17-
if (left == null && right == null) return true;
18-
if (left == null || right == null || left.val != right.val) return false;
19-
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
20+
21+
private boolean dfs(TreeNode root1, TreeNode root2) {
22+
if (root1 == null && root2 == null) {
23+
return true;
24+
}
25+
if (root1 == null || root2 == null || root1.val != root2.val) {
26+
return false;
27+
}
28+
return dfs(root1.left, root2.right) && dfs(root1.right, root2.left);
2029
}
2130
}

0 commit comments

Comments
 (0)