void pre_traverse_no(tree_node *root)
{
if (!root)
return;
stack<tree_node*> nodes;
nodes.push(root);
while(!nodes.empty())
{
tree_node *cur = nodes.top();
nodes.pop();
visit(cur);
if (cur->r)
nodes.push(cur->r);
if (cur->l)
nodes.push(cur->l);
}
}
void mid_traverse_no(tree_node *root)
{
if (!root)
return;
stack<tree_node*> nodes;
tree_node *left = root;
while(!nodes.empty() || left)
{
while(left)
{
nodes.push(left);
left = left->l;
}
tree_node *cur = nodes.top();
nodes.pop();
visit(cur);
left = cur->r;
}
}
void post_traverse_no(tree_node *root)
{
if(!root)
return;
stack<tree_node*> nodes;
tree_node *left = root;
while(!nodes.empty() || left)
{
while(left)
{
nodes.push(left);
left = left->l;
}
tree_node *cur = nodes.top();
nodes.pop();
int point = reinterpret_cast<int>(cur); //直接从二进制层面进行转换,二进制编码不变
if (point > 0)
{
nodes.push(reinterpret_cast<tree_node*>(-point));
left = cur->r;
}
else
visit(reinterpret_cast<tree_node*>(-point));
}
}