using
System;
using
System.Collections.Generic;
class
GFG
{
class
node
{
public
char
data;
public
node left, right;
};
static
node add(
char
data)
{
node newnode =
new
node();
newnode.data = data;
newnode.left = newnode.right =
null
;
return
newnode;
}
static
void
findInv(node root, Stack<node> S)
{
if
(root ==
null
)
return
;
Queue<node> Q =
new
Queue<node>();
Q.Enqueue(root);
while
(Q.Count > 0)
{
node temp = Q.Peek();
Q.Dequeue();
S.Push(temp);
if
(temp.left !=
null
)
Q.Enqueue(temp.left);
if
(temp.right !=
null
)
Q.Enqueue(temp.right);
}
}
static
bool
isPalindrome(Stack<node> S,
node root)
{
Queue<node> Q =
new
Queue<node>();
Q.Enqueue(root);
while
(Q.Count > 0)
{
node temp = Q.Peek();
node temp1 = S.Peek();
S.Pop();
Q.Dequeue();
if
(temp.data != temp1.data)
return
false
;
if
(temp.left !=
null
)
Q.Enqueue(temp.left);
if
(temp.right !=
null
)
Q.Enqueue(temp.right);
}
return
true
;
}
public
static
void
Main(String[] args)
{
node root = add(
'R'
);
root.left = add(
'A'
);
root.right = add(
'D'
);
root.left.left = add(
'A'
);
root.left.right = add(
'R'
);
Stack<node> S =
new
Stack<node>();
findInv(root, S);
if
(isPalindrome(S, root))
Console.Write(
"Yes"
);
else
Console.Write(
"NO"
);
}
}