二叉树的中序遍历 leetcode
解题思路
二叉树的中序遍历
- 前中后序遍历可以通用的标记法 非递归方式
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
if(!root) return {};
vector<int> res;
std::stack<TreeNode*> st;
st.push(root);
//考虑使用标记法 node null
while(!st.empty())
{
auto node= st.top();
st.pop();
if(node !=NULL)
{
if(node->right) st.push(node->right);
st.push(node);
st.push(NULL);
if(node->left) st.push(node->left);
}else
{
auto curNode= st.top();
st.pop();
res.push_back(curNode->val);
}
}
return res;
}
};
- 中序遍历特有的非递归方式
代码
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
//一直左边到底 再返回的思路
TreeNode * node= root;
std::stack<TreeNode*> st;
std::vector<int> res;
while(node || !st.empty())
{
while(node)
{
st.push(node);
node= node->left;
}
node= st.top();
st.pop();
res.push_back(node->val);
node= node->right;
}
return res;
}
};