void putinstackChar(tree<char>& t, stack<char>& s)
{
	if (t.LeftTree().empty() && t.RightTree().empty())
	{
		s.push(t.RootTree());

	}
	else if (!t.LeftTree().empty() && !t.RightTree().empty())
	{

		s.push(t.RootTree());
		putinstackChar(t.LeftTree(), s);
		putinstackChar(t.RightTree(), s);
	}
	else if (t.RightTree().empty())
	{

		s.push(t.RootTree());
		putinstackChar(t.LeftTree(), s);
	}
	else if (t.LeftTree().empty())
	{

		s.push(t.RootTree());
		putinstackChar(t.RightTree(), s);
	}

}
void putinstack(tree<int>& t, stack<int>& s, stack<int>& tops)
{
	if (t.LeftTree().empty() && t.RightTree().empty())
	{
		s.push(t.RootTree());
		tops.push(1);
	}
	else if (!t.LeftTree().empty() && !t.RightTree().empty())
	{
		tops.push(topsCount(t));
		s.push(t.RootTree());
		putinstack(t.LeftTree(), s, tops);
		putinstack(t.RightTree(), s, tops);
	}
	else if (t.RightTree().empty())
	{
		tops.push(topsCount(t));
		s.push(t.RootTree());
		putinstack(t.LeftTree(), s,tops);
	}
	else if (t.LeftTree().empty())
	{
		tops.push(topsCount(t));
		s.push(t.RootTree());
		putinstack(t.RightTree(), s, tops);
	}

}
bool areMirrored(tree<int> l, tree<int> r) {
  if (l.empty() && r.empty()) {
    return true;
  }
  if (l.empty() || r.empty()) {
    return false;
  }
  if (l.RootTree() != r.RootTree()) {
    return false;
  }

  return areMirrored(l.LeftTree(), r.RightTree())
      && areMirrored(l.RightTree(), r.LeftTree());
}