给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路:
递归的方法简单易懂,这里要求用非递归的方法实现,对于中序遍历(左-中-右)我们需要一个栈,首先压入根节点,然后循环压入左节点,如果左节点不为空就压出栈顶节点并打印,然后压入栈顶元素的右节点。
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
if (!root) {
return res;
}
TreeNode* tmp = root;
stack<TreeNode*> stack;
while (tmp || !stack.empty()) {
while (tmp != nullptr) {
stack.push(tmp);
tmp = tmp->left;
}
if (!stack.empty()) {
tmp = stack.top();
res.push_back(tmp->val);
stack.pop();
tmp=tmp->right;
}
}
return res;
}