二叉树的中序遍历(非递归)
思路:从根节点开始,往左走分两种情况1.有左孩子,则把它插入栈中,并向左走。2.没有左孩子,这时,代表以此时栈顶元素为根节点的树开始向右走,那么先输出栈顶元素,并删除栈顶元素。之后往右走一步。重复上述操作
class solution{
public:
vector<int> result;
public:
vector<int> Inorder_traversal(TreeNode *root)
{
if(root==null)
return;
}
stack<TreeNode*> Inorder_stack;
TreeNode* p;
p=root;
while(p||!Inorder_stack.empty())
{
if(p)
{
Inorder_stack.push(p);
p=p->left;
}
else
{
p=Inorder_stack.top();
result.push_back(p->data);
Inorder_stack.pop();
p=p->right;
}
}
return result;
}