题意:中序遍历二叉树,要求非递归
思路:设置一个栈,给每个节点设置一个标号,代表是否展开过。若未展开过,前序遍历就按right left root ,中序遍历就按 right root left,后序遍历就按root right left压入栈。发现展开过,就直接放入vector中。循环,至栈为空,得到的vector就是遍历后的结果
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
if(root == NULL)
return ret;
stack <pair<TreeNode *,bool> > tree;
//pair<TreeNode *,bool> *p;
TreeNode *p;
bool depose;
tree.push(make_pair(root,false));
while(!tree.empty()){
p = tree.top().first;
depose = tree.top().second;
tree.pop();
if(!depose){//未展开
if(p->right != NULL) //左子树
tree.push(make_pair(p->right,false));
tree.push(make_pair(p,true)); //根,记为ture,表示已展开过
if(p->left != NULL) //右子树
tree.push(make_pair(p->left,false));
}else{
ret.push_back(p->val);
}
}
return ret;
}
};