LeetCode94. 二叉树的中序遍历
1.问题
2.思路
(1)什么是中根遍历
(2)递归
和前序后序差不多的思路!
(3)迭代
需要借助一个栈!
一段ADL伪代码!
过程模拟
3.代码实现
(1)递归
class Solution {
public:
void inOrder(TreeNode*cur,vector<int>& vec)
{
if(cur == NULL)return;
inOrder(cur->left,vec);//左
vec.push_back(cur->val);//根
inOrder(cur->right,vec);//右
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inOrder(root, result);
return result;
}
};
(2)迭代
class Solution{
public:
vector<int> inorderTraversal(TreeNode* root){
vector<int> result;
stack<TreeNode*> st;//创建栈
TreeNode* cur = root;
while(1)
{
while(cur != NULL){//每加入一个,先判断它能否沿左下行,有则放入
st.push(cur);//沿左分支下行,访问的节点放进栈
cur = cur->left;
}
if(st.empty()) return result;//栈空就返回!
cur = st.top();//如果上一步的cur->right指空,那这里会继续出栈
st.pop();
result.push_back(cur->val);
cur = cur->right;
}
}
};