void postorderNoR(const Node *root)
{
stack<const Node*> s;
const Node *itr = root;
while (itr || !s.empty())
{
if (!itr)
{
while (!s.empty() && itr == s.top()->right)
{
itr = s.top();
s.pop();
printf("%d ",itr->value);
}
itr = s.empty() ? NULL : s.top()->right;
}
else
{
s.push(itr);
itr = itr->left;
}
}
}
void preorderNoR(const Node *root)
{
stack<const Node*> s;
const Node *itr = root;
while (itr || !s.empty())
{
if (!itr)
{
itr = s.top();
s.pop();
itr = itr->right;
}
else
{
printf("%d ",itr->value);
s.push(itr);
itr = itr->left;
}
}
}
void inorderNoR(const Node *root)
{
stack<const Node*> s;
const Node *itr = root;
while (itr || !s.empty())
{
if (!itr)
{
itr = s.top();
s.pop();
printf("%d ",itr->value);
itr = itr->right;
}
else
{
s.push(itr);
itr = itr->left;
}
}
}
dm9pZCBwb3N0b3JkZXJOb1IoY29uc3QgTm9kZSAqcm9vdCkKewoJc3RhY2s8Y29uc3QgTm9kZSo+IHM7Cgljb25zdCBOb2RlICppdHIgPSByb290OwoJCgl3aGlsZSAoaXRyIHx8ICFzLmVtcHR5KCkpCgl7CgkJaWYgKCFpdHIpCgkJewoJCQl3aGlsZSAoIXMuZW1wdHkoKSAmJiBpdHIgPT0gcy50b3AoKS0+cmlnaHQpCgkJCXsKCQkJCWl0ciA9IHMudG9wKCk7CgkJCQlzLnBvcCgpOwoJCQkJcHJpbnRmKCIlZCAiLGl0ci0+dmFsdWUpOwoJCQl9CgkJCQoJCQlpdHIgPSBzLmVtcHR5KCkgPyBOVUxMIDogcy50b3AoKS0+cmlnaHQ7CgkJfQoJCWVsc2UKCQl7CgkJCXMucHVzaChpdHIpOwoJCQlpdHIgPSBpdHItPmxlZnQ7CgkJfQoJfQp9Cgp2b2lkIHByZW9yZGVyTm9SKGNvbnN0IE5vZGUgKnJvb3QpCnsKCXN0YWNrPGNvbnN0IE5vZGUqPiBzOwoJY29uc3QgTm9kZSAqaXRyID0gcm9vdDsKCQoJd2hpbGUgKGl0ciB8fCAhcy5lbXB0eSgpKQoJewoJCWlmICghaXRyKQoJCXsKCQkJaXRyID0gcy50b3AoKTsKCQkJcy5wb3AoKTsKCQkJaXRyID0gaXRyLT5yaWdodDsKCQl9CgkJZWxzZQoJCXsKCQkJcHJpbnRmKCIlZCAiLGl0ci0+dmFsdWUpOwoJCQlzLnB1c2goaXRyKTsKCQkJaXRyID0gaXRyLT5sZWZ0OwoJCX0KCX0KfQoKdm9pZCBpbm9yZGVyTm9SKGNvbnN0IE5vZGUgKnJvb3QpCnsKCXN0YWNrPGNvbnN0IE5vZGUqPiBzOwoJY29uc3QgTm9kZSAqaXRyID0gcm9vdDsKCQoJd2hpbGUgKGl0ciB8fCAhcy5lbXB0eSgpKQoJewoJCWlmICghaXRyKQoJCXsKCQkJaXRyID0gcy50b3AoKTsKCQkJcy5wb3AoKTsKCQkJcHJpbnRmKCIlZCAiLGl0ci0+dmFsdWUpOwoJCQlpdHIgPSBpdHItPnJpZ2h0OwoJCX0KCQllbHNlCgkJewoJCQlzLnB1c2goaXRyKTsKCQkJaXRyID0gaXRyLT5sZWZ0OwoJCX0KCX0KfQ==