Skip to content

Commit 6c29a93

Browse files
committed
feat: add solutions to lcof problem: No.28
面试题 28. 对称的二叉树
1 parent 13521ea commit 6c29a93

File tree

3 files changed

+168
-0
lines changed

3 files changed

+168
-0
lines changed

lcof/面试题28. 对称的二叉树/README.md

+89
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,95 @@ public:
190190

191191
```
192192
193+
### **TypeScript**
194+
195+
```ts
196+
/**
197+
* Definition for a binary tree node.
198+
* class TreeNode {
199+
* val: number
200+
* left: TreeNode | null
201+
* right: TreeNode | null
202+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
203+
* this.val = (val===undefined ? 0 : val)
204+
* this.left = (left===undefined ? null : left)
205+
* this.right = (right===undefined ? null : right)
206+
* }
207+
* }
208+
*/
209+
210+
function isSymmetric(root: TreeNode | null): boolean {
211+
if (root == null) {
212+
return true;
213+
}
214+
const dfs = (l: TreeNode | null, r: TreeNode | null) => {
215+
if (l == null && r == null) {
216+
return true;
217+
}
218+
if (l == null || r == null) {
219+
return false;
220+
}
221+
return (
222+
l.val == r.val &&
223+
dfs(l.left, r.right) &&
224+
dfs(l.right, r.left) &&
225+
true
226+
);
227+
};
228+
return dfs(root.left, root.right);
229+
}
230+
```
231+
232+
### **Rust**
233+
234+
```rust
235+
// Definition for a binary tree node.
236+
// #[derive(Debug, PartialEq, Eq)]
237+
// pub struct TreeNode {
238+
// pub val: i32,
239+
// pub left: Option<Rc<RefCell<TreeNode>>>,
240+
// pub right: Option<Rc<RefCell<TreeNode>>>,
241+
// }
242+
//
243+
// impl TreeNode {
244+
// #[inline]
245+
// pub fn new(val: i32) -> Self {
246+
// TreeNode {
247+
// val,
248+
// left: None,
249+
// right: None
250+
// }
251+
// }
252+
// }
253+
use std::cell::RefCell;
254+
use std::rc::Rc;
255+
impl Solution {
256+
pub fn is_symmetric(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
257+
match root {
258+
None => true,
259+
Some(root) => {
260+
fn dfs(
261+
l: &Option<Rc<RefCell<TreeNode>>>,
262+
r: &Option<Rc<RefCell<TreeNode>>>,
263+
) -> bool {
264+
if l.is_none() && r.is_none() {
265+
return true;
266+
}
267+
if l.is_none() || r.is_none() {
268+
return false;
269+
}
270+
let l = l.as_ref().unwrap().borrow();
271+
let r = r.as_ref().unwrap().borrow();
272+
l.val == r.val && dfs(&l.left, &r.right) && dfs(&l.right, &r.left) && true
273+
}
274+
let node = root.borrow();
275+
dfs(&node.left, &node.right)
276+
}
277+
}
278+
}
279+
}
280+
281+
```
193282
### **...**
194283

195284
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Definition for a binary tree node.
2+
// #[derive(Debug, PartialEq, Eq)]
3+
// pub struct TreeNode {
4+
// pub val: i32,
5+
// pub left: Option<Rc<RefCell<TreeNode>>>,
6+
// pub right: Option<Rc<RefCell<TreeNode>>>,
7+
// }
8+
//
9+
// impl TreeNode {
10+
// #[inline]
11+
// pub fn new(val: i32) -> Self {
12+
// TreeNode {
13+
// val,
14+
// left: None,
15+
// right: None
16+
// }
17+
// }
18+
// }
19+
use std::cell::RefCell;
20+
use std::rc::Rc;
21+
impl Solution {
22+
pub fn is_symmetric(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
23+
match root {
24+
None => true,
25+
Some(root) => {
26+
fn dfs(
27+
l: &Option<Rc<RefCell<TreeNode>>>,
28+
r: &Option<Rc<RefCell<TreeNode>>>,
29+
) -> bool {
30+
if l.is_none() && r.is_none() {
31+
return true;
32+
}
33+
if l.is_none() || r.is_none() {
34+
return false;
35+
}
36+
let l = l.as_ref().unwrap().borrow();
37+
let r = r.as_ref().unwrap().borrow();
38+
l.val == r.val && dfs(&l.left, &r.right) && dfs(&l.right, &r.left) && true
39+
}
40+
let node = root.borrow();
41+
dfs(&node.left, &node.right)
42+
}
43+
}
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function isSymmetric(root: TreeNode | null): boolean {
16+
if (root == null) {
17+
return true;
18+
}
19+
const dfs = (l: TreeNode | null, r: TreeNode | null) => {
20+
if (l == null && r == null) {
21+
return true;
22+
}
23+
if (l == null || r == null) {
24+
return false;
25+
}
26+
return (
27+
l.val == r.val &&
28+
dfs(l.left, r.right) &&
29+
dfs(l.right, r.left) &&
30+
true
31+
);
32+
};
33+
return dfs(root.left, root.right);
34+
}

0 commit comments

Comments
 (0)