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()); }