题目描述
给出一棵二叉树,返回这棵树的中序遍历
例如:
给出的二叉树为{1,#,2,3},
1↵ ↵ 2↵ /↵ 3↵
返回[1,3,2].
备注:递归的解法太没有新意了,你能用迭代的方法来解这道题吗?
如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
我们用如下方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5
上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".
解题思路
/**
* Definition for binary tree
* 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> res;
if(root == NULL)
return res;
stack<TreeNode *> st; //利用栈的先进后出来保存节点
TreeNode *p = root;
while(!st.empty() || p){ //p存在或者栈不空的时候循环
while(p){
st.push(p); //p入栈
p = p->left; //更新为左子树节点
}
p = st.top(); //将栈顶元素调出
st.pop();
res.push_back(p->val); //存入容器
p = p->right; //进入右子树
}
return res;
}
};