Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_algorithm
提交
4dae11ea
S
skill_tree_algorithm
项目概览
CSDN 技术社区
/
skill_tree_algorithm
通知
9
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4dae11ea
编写于
11月 08, 2021
作者:
每日一练社区
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update dir sstructure
上级
476e9c90
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
988 addition
and
12 deletion
+988
-12
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/config.json
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/config.json
+13
-0
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/desc.html
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/desc.html
+2
-0
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.cpp
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.cpp
+51
-0
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.json
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.json
+7
-0
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.md
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.md
+158
-0
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/config.json
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/config.json
+13
-0
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/desc.html
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/desc.html
+2
-0
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.cpp
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.cpp
+50
-0
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.json
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.json
+7
-0
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.md
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.md
+190
-0
data/3.算法高阶/5.leetcode-树/99_相同的树/config.json
data/3.算法高阶/5.leetcode-树/99_相同的树/config.json
+13
-0
data/3.算法高阶/5.leetcode-树/99_相同的树/desc.html
data/3.算法高阶/5.leetcode-树/99_相同的树/desc.html
+2
-0
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.cpp
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.cpp
+32
-0
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.json
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.json
+7
-0
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.md
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.md
+90
-0
data_backup/1.leetcode/96_交错字符串/solution.md
data_backup/1.leetcode/96_交错字符串/solution.md
+129
-4
data_backup/1.leetcode/98_恢复二叉搜索树/solution.md
data_backup/1.leetcode/98_恢复二叉搜索树/solution.md
+161
-4
data_backup/1.leetcode/99_相同的树/solution.md
data_backup/1.leetcode/99_相同的树/solution.md
+61
-4
未找到文件。
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/config.json
0 → 100644
浏览文件 @
4dae11ea
{
"node_id"
:
"569d5e11c4fc5de7844053d9a733c5e8"
,
"keywords"
:
[
"leetcode"
,
"交错字符串"
],
"children"
:
[],
"export"
:
[
"solution.json"
],
"title"
:
"交错字符串"
}
\ No newline at end of file
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/desc.html
0 → 100644
浏览文件 @
4dae11ea
<p>
给定三个字符串
<code>
s1
</code>
、
<code>
s2
</code>
、
<code>
s3
</code>
,请你帮忙验证
<code>
s3
</code>
是否是由
<code>
s1
</code>
和
<code>
s2
</code><em>
</em><strong>
交错
</strong>
组成的。
</p><p>
两个字符串
<code>
s
</code>
和
<code>
t
</code>
<strong>
交错
</strong>
的定义与过程如下,其中每个字符串都会被分割成若干
<strong>
非空
</strong>
子字符串:
</p><ul>
<li><code>
s = s
<sub>
1
</sub>
+ s
<sub>
2
</sub>
+ ... + s
<sub>
n
</sub></code></li>
<li><code>
t = t
<sub>
1
</sub>
+ t
<sub>
2
</sub>
+ ... + t
<sub>
m
</sub></code></li>
<li><code>
|n - m|
<
=
1</
code
></li>
<li><strong>
交错
</strong>
是
<code>
s
<sub>
1
</sub>
+ t
<sub>
1
</sub>
+ s
<sub>
2
</sub>
+ t
<sub>
2
</sub>
+ s
<sub>
3
</sub>
+ t
<sub>
3
</sub>
+ ...
</code>
或者
<code>
t
<sub>
1
</sub>
+ s
<sub>
1
</sub>
+ t
<sub>
2
</sub>
+ s
<sub>
2
</sub>
+ t
<sub>
3
</sub>
+ s
<sub>
3
</sub>
+ ...
</code></li></ul><p><strong>
提示:
</strong><code>
a + b
</code>
意味着字符串
<code>
a
</code>
和
<code>
b
</code>
连接。
</p><p>
</p><p><strong>
示例 1:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0097.Interleaving%20String/images/interleave.jpg"
style=
"width: 561px; height: 203px;"
/><pre><strong>
输入:
</strong>
s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
<strong><br
/>
输出:
</strong>
true
</pre><p><strong>
示例 2:
</strong></p><pre><strong>
输入:
</strong>
s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
<strong><br
/>
输出:
</strong>
false
</pre><p><strong>
示例 3:
</strong></p><pre><strong>
输入:
</strong>
s1 = "", s2 = "", s3 = ""
<strong><br
/>
输出:
</strong>
true
</pre><p>
</p><p><strong>
提示:
</strong></p><ul>
<li><code>
0
<
=
s1.length
,
s2.length
<=
100</
code
></li>
<li><code>
0
<
=
s3.length
<=
200</
code
></li>
<li><code>
s1
</code>
、
<code>
s2
</code>
、和
<code>
s3
</code>
都由小写英文字母组成
</li></ul>
\ No newline at end of file
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.cpp
0 → 100644
浏览文件 @
4dae11ea
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
static
bool
isInterleave
(
char
*
s1
,
char
*
s2
,
char
*
s3
)
{
int
i
,
j
;
int
len1
=
strlen
(
s1
);
int
len2
=
strlen
(
s2
);
int
len3
=
strlen
(
s3
);
if
(
len1
+
len2
!=
len3
)
{
return
false
;
}
bool
*
table
=
malloc
((
len1
+
1
)
*
(
len2
+
1
)
*
sizeof
(
bool
));
bool
**
dp
=
malloc
((
len1
+
1
)
*
sizeof
(
bool
*
));
for
(
i
=
0
;
i
<
len1
+
1
;
i
++
)
{
dp
[
i
]
=
&
table
[
i
*
(
len2
+
1
)];
}
dp
[
0
][
0
]
=
true
;
for
(
i
=
1
;
i
<
len1
+
1
;
i
++
)
{
dp
[
i
][
0
]
=
dp
[
i
-
1
][
0
]
&&
s1
[
i
-
1
]
==
s3
[
i
-
1
];
}
for
(
i
=
1
;
i
<
len2
+
1
;
i
++
)
{
dp
[
0
][
i
]
=
dp
[
0
][
i
-
1
]
&&
s2
[
i
-
1
]
==
s3
[
i
-
1
];
}
for
(
i
=
1
;
i
<
len1
+
1
;
i
++
)
{
for
(
j
=
1
;
j
<
len2
+
1
;
j
++
)
{
bool
up
=
dp
[
i
-
1
][
j
]
&&
s1
[
i
-
1
]
==
s3
[
i
+
j
-
1
];
bool
left
=
dp
[
i
][
j
-
1
]
&&
s2
[
j
-
1
]
==
s3
[
i
+
j
-
1
];
dp
[
i
][
j
]
=
up
||
left
;
}
}
return
dp
[
len1
][
len2
];
}
int
main
(
int
argc
,
char
**
argv
)
{
if
(
argc
!=
4
)
{
fprintf
(
stderr
,
"Usage: ./test s1 s2 s3
\n
"
);
exit
(
-
1
);
}
printf
(
"%s
\n
"
,
isInterleave
(
argv
[
1
],
argv
[
2
],
argv
[
3
])
?
"true"
:
"false"
);
return
0
;
}
\ No newline at end of file
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.json
0 → 100644
浏览文件 @
4dae11ea
{
"type"
:
"code_options"
,
"author"
:
"CSDN.net"
,
"source"
:
"solution.md"
,
"exercise_id"
:
"c44af29fd6514841a9306e625c0e8a14"
}
\ No newline at end of file
data/2.算法中阶/3.leetcode-字符串/96_交错字符串/solution.md
0 → 100644
浏览文件 @
4dae11ea
# 交错字符串
<p>给定三个字符串 <code>s1</code>、<code>s2</code>、<code>s3</code>,请你帮忙验证 <code>s3</code> 是否是由 <code>s1</code> 和 <code>s2</code><em> </em><strong>交错 </strong>组成的。</p><p>两个字符串 <code>s</code> 和 <code>t</code> <strong>交错</strong> 的定义与过程如下,其中每个字符串都会被分割成若干 <strong>非空</strong> 子字符串:</p><ul> <li><code>s = s<sub>1</sub> + s<sub>2</sub> + ... + s<sub>n</sub></code></li> <li><code>t = t<sub>1</sub> + t<sub>2</sub> + ... + t<sub>m</sub></code></li> <li><code>|n - m| <= 1</code></li> <li><strong>交错</strong> 是 <code>s<sub>1</sub> + t<sub>1</sub> + s<sub>2</sub> + t<sub>2</sub> + s<sub>3</sub> + t<sub>3</sub> + ...</code> 或者 <code>t<sub>1</sub> + s<sub>1</sub> + t<sub>2</sub> + s<sub>2</sub> + t<sub>3</sub> + s<sub>3</sub> + ...</code></li></ul><p><strong>提示:</strong><code>a + b</code> 意味着字符串 <code>a</code> 和 <code>b</code> 连接。</p><p> </p><p><strong>示例 1:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0097.Interleaving%20String/images/interleave.jpg" style="width: 561px; height: 203px;" /><pre><strong>输入:</strong>s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"<strong><br />输出:</strong>true</pre><p><strong>示例 2:</strong></p><pre><strong>输入:</strong>s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"<strong><br />输出:</strong>false</pre><p><strong>示例 3:</strong></p><pre><strong>输入:</strong>s1 = "", s2 = "", s3 = ""<strong><br />输出:</strong>true</pre><p> </p><p><strong>提示:</strong></p><ul> <li><code>0 <= s1.length, s2.length <= 100</code></li> <li><code>0 <= s3.length <= 200</code></li> <li><code>s1</code>、<code>s2</code>、和 <code>s3</code> 都由小写英文字母组成</li></ul>
<p>
以下错误的选项是?
</p>
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
```
### after
```
cpp
int
main
()
{
Solution
sol
;
bool
res
;
string
s1
=
"aabcc"
;
string
s2
=
"dbbca"
;
string
s3
=
"aadbbcbcac"
;
res
=
sol
.
isInterleave
(
s1
,
s2
,
s3
);
cout
<<
res
;
return
0
;
}
```
## 答案
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
int
len1
=
s1
.
length
();
int
len2
=
s2
.
length
();
int
len3
=
s3
.
length
();
if
(
len1
+
len2
!=
len3
)
return
false
;
bool
f
[
len1
+
1
][
len2
+
1
];
f
[
0
][
0
]
=
true
;
for
(
int
i
=
0
;
i
<
len1
+
1
;
i
++
)
{
for
(
int
j
=
0
;
j
<
len2
+
1
;
j
++
)
{
if
(
j
>
0
)
{
f
[
i
][
j
]
=
f
[
i
][
j
-
1
]
&&
s3
[
i
+
j
-
1
];
}
if
(
i
>
0
)
{
f
[
i
][
j
]
=
f
[
i
][
j
]
||
(
f
[
i
-
1
][
j
]
&&
s3
[
i
+
j
-
1
]);
}
}
}
return
f
[
len1
][
len2
];
}
};
```
## 选项
### A
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
if
(
s1
.
size
()
+
s2
.
size
()
!=
s3
.
size
())
return
false
;
int
m
=
s1
.
size
(),
n
=
s2
.
size
(),
i
,
j
,
k
;
vector
<
vector
<
int
>>
dp
(
m
+
1
,
vector
<
int
>
(
n
+
1
,
0
));
dp
[
0
][
0
]
=
1
;
for
(
i
=
0
;
i
<
m
;
i
++
)
if
(
s1
[
i
]
==
s3
[
i
])
dp
[
i
+
1
][
0
]
=
1
;
else
break
;
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
s2
[
i
]
==
s3
[
i
])
dp
[
0
][
i
+
1
]
=
1
;
else
break
;
for
(
i
=
1
;
i
<=
m
;
++
i
)
for
(
j
=
1
;
j
<=
n
;
j
++
)
{
k
=
i
+
j
;
if
(
s1
[
i
-
1
]
==
s3
[
k
-
1
])
dp
[
i
][
j
]
|=
dp
[
i
-
1
][
j
];
if
(
s2
[
j
-
1
]
==
s3
[
k
-
1
])
dp
[
i
][
j
]
|=
dp
[
i
][
j
-
1
];
}
return
dp
[
m
][
n
];
}
};
```
### B
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
if
(
s1
.
size
()
+
s2
.
size
()
!=
s3
.
size
())
return
false
;
int
m
=
s1
.
size
(),
n
=
s2
.
size
();
vector
<
vector
<
bool
>>
dp
(
m
+
1
,
vector
<
bool
>
(
n
+
1
,
false
));
dp
[
0
][
0
]
=
true
;
for
(
int
i
=
1
;
i
<=
m
;
++
i
)
dp
[
i
][
0
]
=
dp
[
i
-
1
][
0
]
&&
(
s1
[
i
-
1
]
==
s3
[
i
-
1
]);
for
(
int
i
=
1
;
i
<=
n
;
++
i
)
dp
[
0
][
i
]
=
dp
[
0
][
i
-
1
]
&&
(
s2
[
i
-
1
]
==
s3
[
i
-
1
]);
for
(
int
i
=
1
;
i
<=
m
;
++
i
)
for
(
int
j
=
1
;
j
<=
n
;
++
j
)
{
dp
[
i
][
j
]
=
(
dp
[
i
-
1
][
j
]
&&
s1
[
i
-
1
]
==
s3
[
i
+
j
-
1
])
||
(
dp
[
i
][
j
-
1
]
&&
s2
[
j
-
1
]
==
s3
[
i
+
j
-
1
]);
}
return
dp
[
m
][
n
];
}
};
```
### C
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
int
s1_len
=
s1
.
size
();
int
s2_len
=
s2
.
size
();
int
s3_len
=
s3
.
size
();
if
(
s1_len
+
s2_len
!=
s3_len
)
return
false
;
if
(
s1_len
==
0
||
s2_len
==
0
)
return
s1
+
s2
==
s3
;
vector
<
vector
<
bool
>>
dp
(
s1_len
+
1
,
vector
<
bool
>
(
s2_len
+
1
));
dp
[
0
][
0
]
=
true
;
for
(
int
i
=
0
;
i
<=
s1_len
;
i
++
)
{
for
(
int
j
=
0
;
j
<=
s2_len
;
j
++
)
{
if
(
dp
[
i
][
j
])
{
if
(
i
<
s1_len
&&
s1
[
i
]
==
s3
[
i
+
j
])
dp
[
i
+
1
][
j
]
=
true
;
if
(
j
<
s2_len
&&
s2
[
j
]
==
s3
[
i
+
j
])
dp
[
i
][
j
+
1
]
=
true
;
}
}
}
return
dp
[
s1_len
][
s2_len
];
}
};
```
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/config.json
0 → 100644
浏览文件 @
4dae11ea
{
"node_id"
:
"569d5e11c4fc5de7844053d9a733c5e8"
,
"keywords"
:
[
"leetcode"
,
"恢复二叉搜索树"
],
"children"
:
[],
"export"
:
[
"solution.json"
],
"title"
:
"恢复二叉搜索树"
}
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/desc.html
0 → 100644
浏览文件 @
4dae11ea
<p>
给你二叉搜索树的根节点
<code>
root
</code>
,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
</p><p><strong>
进阶:
</strong>
使用 O(
<em>
n
</em>
) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?
</p><p>
</p><p><strong>
示例 1:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0099.Recover%20Binary%20Search%20Tree/images/recover1.jpg"
style=
"width: 422px; height: 302px;"
/><pre><strong>
输入:
</strong>
root = [1,3,null,null,2]
<strong><br
/>
输出:
</strong>
[3,1,null,null,2]
<strong><br
/>
解释:
</strong>
3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。
</pre><p><strong>
示例 2:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0099.Recover%20Binary%20Search%20Tree/images/recover2.jpg"
style=
"width: 581px; height: 302px;"
/><pre><strong>
输入:
</strong>
root = [3,1,4,null,null,2]
<strong><br
/>
输出:
</strong>
[2,1,4,null,null,3]
<strong><br
/>
解释:
</strong>
2 不能在 3 的右子树中,因为 2
<
3
。
交换
2
和
3
使二叉搜索树有效
。</
pre
><p>
</p><p><strong>
提示:
</strong></p><ul>
<li>
树上节点的数目在范围
<code>
[2, 1000]
</code>
内
</li>
<li><code>
-2
<sup>
31
</sup>
<
=
Node.val
<=
2<
sup
>
31
</sup>
- 1
</code></li></ul>
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.cpp
0 → 100644
浏览文件 @
4dae11ea
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
class
Solution
{
public:
void
recoverTree
(
TreeNode
*
root
)
{
dfs
(
root
);
int
tmp
=
p0_
->
val
;
p0_
->
val
=
p1_
->
val
;
p1_
->
val
=
tmp
;
}
private:
int
wrong_
=
0
;
TreeNode
*
prev_
=
nullptr
;
TreeNode
*
p0_
=
nullptr
;
TreeNode
*
p1_
=
nullptr
;
void
dfs
(
TreeNode
*
root
)
{
if
(
root
==
nullptr
||
wrong_
==
2
)
{
return
;
}
dfs
(
root
->
left
);
if
(
prev_
!=
nullptr
&&
prev_
->
val
>
root
->
val
)
{
if
(
++
wrong_
==
1
)
{
p0_
=
prev_
;
p1_
=
root
;
}
else
if
(
wrong_
==
2
)
{
p1_
=
root
;
}
}
prev_
=
root
;
dfs
(
root
->
right
);
}
};
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.json
0 → 100644
浏览文件 @
4dae11ea
{
"type"
:
"code_options"
,
"author"
:
"CSDN.net"
,
"source"
:
"solution.md"
,
"exercise_id"
:
"6f36dd5736a941d091ed802411238645"
}
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/98_恢复二叉搜索树/solution.md
0 → 100644
浏览文件 @
4dae11ea
# 恢复二叉搜索树
<p>给你二叉搜索树的根节点 <code>root</code> ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。</p><p><strong>进阶:</strong>使用 O(<em>n</em>) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?</p><p> </p><p><strong>示例 1:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0099.Recover%20Binary%20Search%20Tree/images/recover1.jpg" style="width: 422px; height: 302px;" /><pre><strong>输入:</strong>root = [1,3,null,null,2]<strong><br />输出:</strong>[3,1,null,null,2]<strong><br />解释:</strong>3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。</pre><p><strong>示例 2:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0099.Recover%20Binary%20Search%20Tree/images/recover2.jpg" style="width: 581px; height: 302px;" /><pre><strong>输入:</strong>root = [3,1,4,null,null,2]<strong><br />输出:</strong>[2,1,4,null,null,3]<strong><br />解释:</strong>2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。</pre><p> </p><p><strong>提示:</strong></p><ul> <li>树上节点的数目在范围 <code>[2, 1000]</code> 内</li> <li><code>-2<sup>31</sup> <= Node.val <= 2<sup>31</sup> - 1</code></li></ul>
<p>
以下错误的选项是?
</p>
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
```
### after
```
cpp
```
## 答案
```
cpp
class
Solution
{
public:
TreeNode
*
pre
=
NULL
;
TreeNode
*
one
=
NULL
;
TreeNode
*
two
=
NULL
;
bool
search
(
TreeNode
*
root
)
{
if
(
root
==
NULL
)
return
false
;
if
(
search
(
root
->
left
))
return
true
;
if
(
pre
!=
NULL
&&
pre
->
val
>
root
->
val
)
{
if
(
one
==
NULL
)
{
one
=
root
;
two
=
pre
;
}
else
{
two
=
root
;
return
true
;
}
}
pre
=
root
;
if
(
search
(
root
->
right
))
return
true
;
return
false
;
}
void
recoverTree
(
TreeNode
*
root
)
{
search
(
root
);
swap
(
one
->
val
,
two
->
val
);
}
};
```
## 选项
### A
```
cpp
class
Solution
{
public:
TreeNode
*
x
,
*
y
,
*
pre
;
void
DFS
(
TreeNode
*
root
)
{
if
(
root
==
nullptr
)
return
;
DFS
(
root
->
left
);
if
(
pre
&&
root
->
val
<
pre
->
val
)
{
x
=
root
;
if
(
!
y
)
y
=
pre
;
else
return
;
}
pre
=
root
;
DFS
(
root
->
right
);
}
void
recoverTree
(
TreeNode
*
root
)
{
DFS
(
root
);
swap
(
x
->
val
,
y
->
val
);
}
};
```
### B
```
cpp
class
Solution
{
public:
void
insert
(
int
val
,
vector
<
int
>
&
vals
)
{
if
(
vals
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
vals
.
size
();
i
++
)
{
if
(
val
<
vals
[
i
])
{
vals
.
insert
(
vals
.
begin
()
+
i
,
val
);
return
;
}
}
}
vals
.
push_back
(
val
);
}
void
recoverTree
(
TreeNode
*
root
)
{
stack
<
TreeNode
*>
s
;
vector
<
int
>
vals
;
TreeNode
*
tem
=
root
;
while
(
tem
||
!
s
.
empty
())
{
while
(
tem
)
{
s
.
push
(
tem
);
tem
=
tem
->
left
;
}
if
(
!
s
.
empty
())
{
tem
=
s
.
top
();
s
.
pop
();
insert
(
tem
->
val
,
vals
);
tem
=
tem
->
right
;
}
}
tem
=
root
;
int
j
=
0
;
while
(
tem
||
!
s
.
empty
())
{
while
(
tem
)
{
s
.
push
(
tem
);
tem
=
tem
->
left
;
}
if
(
!
s
.
empty
())
{
tem
=
s
.
top
();
s
.
pop
();
tem
->
val
=
vals
[
j
++
];
tem
=
tem
->
right
;
}
}
}
};
```
### C
```
cpp
class
Solution
{
public:
vector
<
TreeNode
*>
order
;
void
inOrder
(
TreeNode
*
root
)
{
if
(
root
->
left
)
inOrder
(
root
->
left
);
order
.
push_back
(
root
);
if
(
root
->
right
)
inOrder
(
root
->
right
);
}
void
recoverTree
(
TreeNode
*
root
)
{
inOrder
(
root
);
int
left
=
-
1
,
right
=
-
1
;
for
(
int
i
=
0
;
i
<
order
.
size
()
-
1
;
++
i
)
{
if
(
order
[
i
]
->
val
>
order
[
i
+
1
]
->
val
)
{
if
(
left
==
-
1
)
left
=
i
;
right
=
i
+
1
;
}
}
if
(
right
==
-
1
)
swap
(
order
[
left
]
->
val
,
order
[
left
+
1
]
->
val
);
else
swap
(
order
[
left
]
->
val
,
order
[
right
]
->
val
);
}
};
```
data/3.算法高阶/5.leetcode-树/99_相同的树/config.json
0 → 100644
浏览文件 @
4dae11ea
{
"node_id"
:
"569d5e11c4fc5de7844053d9a733c5e8"
,
"keywords"
:
[
"leetcode"
,
"相同的树"
],
"children"
:
[],
"export"
:
[
"solution.json"
],
"title"
:
"相同的树"
}
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/99_相同的树/desc.html
0 → 100644
浏览文件 @
4dae11ea
<p>
给你两棵二叉树的根节点
<code>
p
</code>
和
<code>
q
</code>
,编写一个函数来检验这两棵树是否相同。
</p><p>
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
</p><p>
</p><p><strong>
示例 1:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex1.jpg"
style=
"width: 622px; height: 182px;"
/><pre><strong>
输入:
</strong>
p = [1,2,3], q = [1,2,3]
<strong><br
/>
输出:
</strong>
true
</pre><p><strong>
示例 2:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex2.jpg"
style=
"width: 382px; height: 182px;"
/><pre><strong>
输入:
</strong>
p = [1,2], q = [1,null,2]
<strong><br
/>
输出:
</strong>
false
</pre><p><strong>
示例 3:
</strong></p><img
alt=
""
src=
"https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex3.jpg"
style=
"width: 622px; height: 182px;"
/><pre><strong>
输入:
</strong>
p = [1,2,1], q = [1,1,2]
<strong><br
/>
输出:
</strong>
false
</pre><p>
</p><p><strong>
提示:
</strong></p><ul>
<li>
两棵树上的节点数目都在范围
<code>
[0, 100]
</code>
内
</li>
<li><code>
-10
<sup>
4
</sup>
<
=
Node.val
<=
10<
sup
>
4
</sup></code></li></ul>
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.cpp
0 → 100644
浏览文件 @
4dae11ea
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
if
(
p
==
nullptr
&&
q
==
nullptr
)
{
return
true
;
}
if
(
p
==
nullptr
||
q
==
nullptr
)
{
return
false
;
}
if
(
p
->
val
!=
q
->
val
)
{
return
false
;
}
return
isSameTree
(
p
->
left
,
q
->
left
)
&&
isSameTree
(
p
->
right
,
q
->
right
);
}
};
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.json
0 → 100644
浏览文件 @
4dae11ea
{
"type"
:
"code_options"
,
"author"
:
"CSDN.net"
,
"source"
:
"solution.md"
,
"exercise_id"
:
"0f00b8981cd541598110de5d1445d8f6"
}
\ No newline at end of file
data/3.算法高阶/5.leetcode-树/99_相同的树/solution.md
0 → 100644
浏览文件 @
4dae11ea
# 相同的树
<p>给你两棵二叉树的根节点 <code>p</code> 和 <code>q</code> ,编写一个函数来检验这两棵树是否相同。</p><p>如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。</p><p> </p><p><strong>示例 1:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex1.jpg" style="width: 622px; height: 182px;" /><pre><strong>输入:</strong>p = [1,2,3], q = [1,2,3]<strong><br />输出:</strong>true</pre><p><strong>示例 2:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex2.jpg" style="width: 382px; height: 182px;" /><pre><strong>输入:</strong>p = [1,2], q = [1,null,2]<strong><br />输出:</strong>false</pre><p><strong>示例 3:</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0100-0199/0100.Same%20Tree/images/ex3.jpg" style="width: 622px; height: 182px;" /><pre><strong>输入:</strong>p = [1,2,1], q = [1,1,2]<strong><br />输出:</strong>false</pre><p> </p><p><strong>提示:</strong></p><ul> <li>两棵树上的节点数目都在范围 <code>[0, 100]</code> 内</li> <li><code>-10<sup>4</sup> <= Node.val <= 10<sup>4</sup></code></li></ul>
<p>
以下错误的选项是?
</p>
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
```
### after
```
cpp
```
## 答案
```
cpp
都是错的
```
## 选项
### A
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
if
(
p
==
nullptr
)
return
q
==
nullptr
;
return
q
!=
nullptr
&&
p
->
val
==
q
->
val
&&
isSameTree
(
p
->
left
,
q
->
left
)
&&
isSameTree
(
p
->
right
,
q
->
right
);
}
};
```
### B
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
TreeNode
*
temp
,
*
temq
;
temp
=
p
;
temq
=
q
;
bool
lb
,
rb
;
if
(
!
p
&&
!
q
)
return
true
;
if
((
!
p
||
!
q
)
||
p
->
val
!=
q
->
val
)
return
false
;
else
{
lb
=
isSameTree
(
p
->
left
,
q
->
left
);
rb
=
isSameTree
(
p
->
right
,
q
->
right
);
}
if
(
lb
&&
rb
)
return
true
;
else
return
false
;
}
};
```
### C
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
if
(
p
==
NULL
&&
q
==
NULL
)
return
true
;
if
(
p
==
NULL
||
q
==
NULL
)
return
false
;
if
(
p
->
val
!=
q
->
val
)
return
false
;
return
(
isSameTree
(
p
->
left
,
q
->
left
)
&&
isSameTree
(
p
->
right
,
q
->
right
));
}
};
```
data_backup/1.leetcode/96_交错字符串/solution.md
浏览文件 @
4dae11ea
...
...
@@ -4,30 +4,155 @@
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
```
### after
```
cpp
int
main
()
{
Solution
sol
;
bool
res
;
string
s1
=
"aabcc"
;
string
s2
=
"dbbca"
;
string
s3
=
"aadbbcbcac"
;
res
=
sol
.
isInterleave
(
s1
,
s2
,
s3
);
cout
<<
res
;
return
0
;
}
```
## 答案
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
int
len1
=
s1
.
length
();
int
len2
=
s2
.
length
();
int
len3
=
s3
.
length
();
if
(
len1
+
len2
!=
len3
)
return
false
;
bool
f
[
len1
+
1
][
len2
+
1
];
f
[
0
][
0
]
=
true
;
for
(
int
i
=
0
;
i
<
len1
+
1
;
i
++
)
{
for
(
int
j
=
0
;
j
<
len2
+
1
;
j
++
)
{
if
(
j
>
0
)
{
f
[
i
][
j
]
=
f
[
i
][
j
-
1
]
&&
s3
[
i
+
j
-
1
];
}
if
(
i
>
0
)
{
f
[
i
][
j
]
=
f
[
i
][
j
]
||
(
f
[
i
-
1
][
j
]
&&
s3
[
i
+
j
-
1
]);
}
}
}
return
f
[
len1
][
len2
];
}
};
```
## 选项
### A
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
if
(
s1
.
size
()
+
s2
.
size
()
!=
s3
.
size
())
return
false
;
int
m
=
s1
.
size
(),
n
=
s2
.
size
(),
i
,
j
,
k
;
vector
<
vector
<
int
>>
dp
(
m
+
1
,
vector
<
int
>
(
n
+
1
,
0
));
dp
[
0
][
0
]
=
1
;
for
(
i
=
0
;
i
<
m
;
i
++
)
if
(
s1
[
i
]
==
s3
[
i
])
dp
[
i
+
1
][
0
]
=
1
;
else
break
;
for
(
i
=
0
;
i
<
n
;
i
++
)
if
(
s2
[
i
]
==
s3
[
i
])
dp
[
0
][
i
+
1
]
=
1
;
else
break
;
for
(
i
=
1
;
i
<=
m
;
++
i
)
for
(
j
=
1
;
j
<=
n
;
j
++
)
{
k
=
i
+
j
;
if
(
s1
[
i
-
1
]
==
s3
[
k
-
1
])
dp
[
i
][
j
]
|=
dp
[
i
-
1
][
j
];
if
(
s2
[
j
-
1
]
==
s3
[
k
-
1
])
dp
[
i
][
j
]
|=
dp
[
i
][
j
-
1
];
}
return
dp
[
m
][
n
];
}
};
```
### B
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
if
(
s1
.
size
()
+
s2
.
size
()
!=
s3
.
size
())
return
false
;
int
m
=
s1
.
size
(),
n
=
s2
.
size
();
vector
<
vector
<
bool
>>
dp
(
m
+
1
,
vector
<
bool
>
(
n
+
1
,
false
));
dp
[
0
][
0
]
=
true
;
for
(
int
i
=
1
;
i
<=
m
;
++
i
)
dp
[
i
][
0
]
=
dp
[
i
-
1
][
0
]
&&
(
s1
[
i
-
1
]
==
s3
[
i
-
1
]);
for
(
int
i
=
1
;
i
<=
n
;
++
i
)
dp
[
0
][
i
]
=
dp
[
0
][
i
-
1
]
&&
(
s2
[
i
-
1
]
==
s3
[
i
-
1
]);
for
(
int
i
=
1
;
i
<=
m
;
++
i
)
for
(
int
j
=
1
;
j
<=
n
;
++
j
)
{
dp
[
i
][
j
]
=
(
dp
[
i
-
1
][
j
]
&&
s1
[
i
-
1
]
==
s3
[
i
+
j
-
1
])
||
(
dp
[
i
][
j
-
1
]
&&
s2
[
j
-
1
]
==
s3
[
i
+
j
-
1
]);
}
return
dp
[
m
][
n
];
}
};
```
### C
```
cpp
class
Solution
{
public:
bool
isInterleave
(
string
s1
,
string
s2
,
string
s3
)
{
int
s1_len
=
s1
.
size
();
int
s2_len
=
s2
.
size
();
int
s3_len
=
s3
.
size
();
if
(
s1_len
+
s2_len
!=
s3_len
)
return
false
;
if
(
s1_len
==
0
||
s2_len
==
0
)
return
s1
+
s2
==
s3
;
vector
<
vector
<
bool
>>
dp
(
s1_len
+
1
,
vector
<
bool
>
(
s2_len
+
1
));
dp
[
0
][
0
]
=
true
;
for
(
int
i
=
0
;
i
<=
s1_len
;
i
++
)
{
for
(
int
j
=
0
;
j
<=
s2_len
;
j
++
)
{
if
(
dp
[
i
][
j
])
{
if
(
i
<
s1_len
&&
s1
[
i
]
==
s3
[
i
+
j
])
dp
[
i
+
1
][
j
]
=
true
;
if
(
j
<
s2_len
&&
s2
[
j
]
==
s3
[
i
+
j
])
dp
[
i
][
j
+
1
]
=
true
;
}
}
}
return
dp
[
s1_len
][
s2_len
];
}
};
```
data_backup/1.leetcode/98_恢复二叉搜索树/solution.md
浏览文件 @
4dae11ea
...
...
@@ -4,7 +4,18 @@
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
```
### after
```
cpp
...
...
@@ -13,21 +24,167 @@
## 答案
```
cpp
class
Solution
{
public:
TreeNode
*
pre
=
NULL
;
TreeNode
*
one
=
NULL
;
TreeNode
*
two
=
NULL
;
bool
search
(
TreeNode
*
root
)
{
if
(
root
==
NULL
)
return
false
;
if
(
search
(
root
->
left
))
return
true
;
if
(
pre
!=
NULL
&&
pre
->
val
>
root
->
val
)
{
if
(
one
==
NULL
)
{
one
=
root
;
two
=
pre
;
}
else
{
two
=
root
;
return
true
;
}
}
pre
=
root
;
if
(
search
(
root
->
right
))
return
true
;
return
false
;
}
void
recoverTree
(
TreeNode
*
root
)
{
search
(
root
);
swap
(
one
->
val
,
two
->
val
);
}
};
```
## 选项
### A
```
cpp
class
Solution
{
public:
TreeNode
*
x
,
*
y
,
*
pre
;
void
DFS
(
TreeNode
*
root
)
{
if
(
root
==
nullptr
)
return
;
DFS
(
root
->
left
);
if
(
pre
&&
root
->
val
<
pre
->
val
)
{
x
=
root
;
if
(
!
y
)
y
=
pre
;
else
return
;
}
pre
=
root
;
DFS
(
root
->
right
);
}
void
recoverTree
(
TreeNode
*
root
)
{
DFS
(
root
);
swap
(
x
->
val
,
y
->
val
);
}
};
```
### B
```
cpp
class
Solution
{
public:
void
insert
(
int
val
,
vector
<
int
>
&
vals
)
{
if
(
vals
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
vals
.
size
();
i
++
)
{
if
(
val
<
vals
[
i
])
{
vals
.
insert
(
vals
.
begin
()
+
i
,
val
);
return
;
}
}
}
vals
.
push_back
(
val
);
}
void
recoverTree
(
TreeNode
*
root
)
{
stack
<
TreeNode
*>
s
;
vector
<
int
>
vals
;
TreeNode
*
tem
=
root
;
while
(
tem
||
!
s
.
empty
())
{
while
(
tem
)
{
s
.
push
(
tem
);
tem
=
tem
->
left
;
}
if
(
!
s
.
empty
())
{
tem
=
s
.
top
();
s
.
pop
();
insert
(
tem
->
val
,
vals
);
tem
=
tem
->
right
;
}
}
tem
=
root
;
int
j
=
0
;
while
(
tem
||
!
s
.
empty
())
{
while
(
tem
)
{
s
.
push
(
tem
);
tem
=
tem
->
left
;
}
if
(
!
s
.
empty
())
{
tem
=
s
.
top
();
s
.
pop
();
tem
->
val
=
vals
[
j
++
];
tem
=
tem
->
right
;
}
}
}
};
```
### C
```
cpp
class
Solution
{
public:
vector
<
TreeNode
*>
order
;
void
inOrder
(
TreeNode
*
root
)
{
if
(
root
->
left
)
inOrder
(
root
->
left
);
order
.
push_back
(
root
);
if
(
root
->
right
)
inOrder
(
root
->
right
);
}
void
recoverTree
(
TreeNode
*
root
)
{
inOrder
(
root
);
int
left
=
-
1
,
right
=
-
1
;
for
(
int
i
=
0
;
i
<
order
.
size
()
-
1
;
++
i
)
{
if
(
order
[
i
]
->
val
>
order
[
i
+
1
]
->
val
)
{
if
(
left
==
-
1
)
left
=
i
;
right
=
i
+
1
;
}
}
if
(
right
==
-
1
)
swap
(
order
[
left
]
->
val
,
order
[
left
+
1
]
->
val
);
else
swap
(
order
[
left
]
->
val
,
order
[
right
]
->
val
);
}
};
```
data_backup/1.leetcode/99_相同的树/solution.md
浏览文件 @
4dae11ea
...
...
@@ -4,6 +4,18 @@
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
struct
TreeNode
{
int
val
;
TreeNode
*
left
;
TreeNode
*
right
;
TreeNode
()
:
val
(
0
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
)
:
val
(
x
),
left
(
nullptr
),
right
(
nullptr
)
{}
TreeNode
(
int
x
,
TreeNode
*
left
,
TreeNode
*
right
)
:
val
(
x
),
left
(
left
),
right
(
right
)
{}
};
```
### after
...
...
@@ -13,21 +25,66 @@
## 答案
```
cpp
都是错的
```
## 选项
### A
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
if
(
p
==
nullptr
)
return
q
==
nullptr
;
return
q
!=
nullptr
&&
p
->
val
==
q
->
val
&&
isSameTree
(
p
->
left
,
q
->
left
)
&&
isSameTree
(
p
->
right
,
q
->
right
);
}
};
```
### B
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
TreeNode
*
temp
,
*
temq
;
temp
=
p
;
temq
=
q
;
bool
lb
,
rb
;
if
(
!
p
&&
!
q
)
return
true
;
if
((
!
p
||
!
q
)
||
p
->
val
!=
q
->
val
)
return
false
;
else
{
lb
=
isSameTree
(
p
->
left
,
q
->
left
);
rb
=
isSameTree
(
p
->
right
,
q
->
right
);
}
if
(
lb
&&
rb
)
return
true
;
else
return
false
;
}
};
```
### C
```
cpp
class
Solution
{
public:
bool
isSameTree
(
TreeNode
*
p
,
TreeNode
*
q
)
{
if
(
p
==
NULL
&&
q
==
NULL
)
return
true
;
if
(
p
==
NULL
||
q
==
NULL
)
return
false
;
if
(
p
->
val
!=
q
->
val
)
return
false
;
return
(
isSameTree
(
p
->
left
,
q
->
left
)
&&
isSameTree
(
p
->
right
,
q
->
right
));
}
};
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录