题目要求: 用栈的迭代实现二叉树的中序遍历输出。
题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/
思路:从根节点开始从左往下把结点依次入栈,当遇到遍历指针为空则作一次出栈,且把出栈元素放入数组,同时把遍历指针指向该元素结点,然后访问它的右子树。重复上述过程,直道栈和遍历指针同时为空。
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
TreeNode *p = root;
vector<int> res;
while (p != NULL || !s.empty()) {
if (p != NULL) {
s.push(p);
p = p->left;
}
else {
p = s.top();
s.pop();
res.push_back(p->val);
p = p->right;
}
}
return res;
}
};