题目:
解答:
递归版
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root) {
vector<int> res;
inorder(root, res);
return res;
}
private:
void inorder(TreeNode *root, vector<int> &res)
{
if (root == NULL)
return;
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
};
非递归版:
class Solution {
public:
<span style="white-space:pre"> </span> vector<int> inorderTraversal(TreeNode *root) {
<span style="white-space:pre"> </span> vector<int> res;
<span style="white-space:pre"> </span> stack<TreeNode*> st;
<span style="white-space:pre"> </span> TreeNode * temp;
<span style="white-space:pre"> </span> while (!st.empty() || root) //根节点存在,或则是栈不为空
<span style="white-space:pre"> </span> {
<span style="white-space:pre"> </span> while (root) //一直遍历左子树直到叶子节点
<span style="white-space:pre"> </span> {
<span style="white-space:pre"> </span> st.push(root);
<span style="white-space:pre"> </span> root = root->left;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> temp = st.top(); //出栈访问节点
<span style="white-space:pre"> </span> st.pop();
<span style="white-space:pre"> </span> res.push_back(temp->val);
<span style="white-space:pre"> </span> root = temp->right; //将节点的右子树置为待访问节点
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> return res;
<span style="white-space:pre"> </span> }
};