题目
中文
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
英文
题目注意点
题解
第一次
讲解
递归方法
递归方法很简单 就是几个语句的顺序不同。
class Solution {
public:
void inorder(TreeNode* root, vector<int>& res) {
if (!root) {
return;
}
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
inorder(root, res);
return res;
}
};
栈 迭代方法:
思路:每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。
再访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。
伪代码
栈S;
p= root;
while(p || S不空){
while(p){
p入S;
p = p的左子树;
}
p = S.top 出栈;
访问p;
p = p的右子树;
}
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> S;
vector<int> v;
TreeNode* rt = root;
while(rt || S.size()){
while(rt){
S.push(rt);
rt=rt->left;
}
rt=S.top();S.pop();
v.push_back(rt->val);
rt=rt->right;
}
return v;
}
};
注意到
c++ 树的stl模板。
有一个颜色标记法,和Morris法 下次写。