using
System;
class
GFG {
static
bool
checktree(
int
[] preorder,
int
s,
int
[] inorder,
int
s1,
int
[] postorder,
int
s2,
int
len)
{
if
(len == 0)
return
true
;
if
(len == 1)
return
((preorder[s] == inorder[s1])
&& (inorder[s1] == postorder[s2]));
int
idx = -1;
for
(
int
i = s1; i < len; ++i)
if
(inorder[i] == preorder[s]) {
idx = i;
break
;
}
if
(idx == -1)
return
false
;
bool
ret1 = checktree(preorder, s + 1, inorder, s1,
postorder, s2, idx);
bool
ret2 = checktree(
preorder, s + idx + 1, inorder, s1 + idx + 1,
postorder, s2 + idx, len - idx - 1);
return
(ret1 && ret2);
}
static
public
void
Main()
{
int
[] inorder = { 4, 2, 5, 1, 3 };
int
[] preorder = { 1, 2, 4, 5, 3 };
int
[] postorder = { 4, 5, 2, 3, 1 };
int
len1 = inorder.Length;
int
len2 = preorder.Length;
int
len3 = postorder.Length;
if
((len1 == len2) && (len2 == len3)) {
bool
res = checktree(preorder, 0, inorder, 0,
postorder, 0, len1);
Console.Write(((res) ?
"Yes"
:
"No"
));
}
else
Console.Write(
"No\n"
);
}
}