/*
2020年3月20日17:28:22
*/
第一次写博客,Mark一下。主要目的是便于以后复习。
树的中序遍历的迭代写法可以用栈来实现,大概思路如下:对每一个要访问的节点,直接将根节点放入栈中,然后把左子树也放入栈,当左子树为空的时候访问其相对应的根节点并弹出,最后再访问右节点,直到栈为空。动手画一下过程会更容易理解。
// 伪代码
栈S;
p= root;
while(p || S不空){
while(p){
p入S;
p = p的左子树;
}
p = S.top 出栈;
访问p;
p = p的右子树;
}
//C++代码
class Solution {
public:
vector<int> result;
stack<TreeNode*> s;
vector<int> inorderTraversal(TreeNode* root) {
TreeNode* p = root;
while(p || s.size()){
while(p){ //当p不空
s.push(p);
p = p->left;
}
p = s.top();
s.pop();
result.push_back(p->val);
p = p->right;
}
return result;
}
};