给定一个二叉树,返回它的中序 遍历。
示例:
输入: [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; }