LeetCode94 二叉树的中序遍历(栈)

tech2026-08-05  1

题目链接:leetcode94

题目大意

给定一个二叉树,返回它的中序 遍历。 非递归实现

解题思路

栈+模拟

大致的思路就是不断往左子树切换,直到左边为空后把当前的节点输出,然后转到右子树。如果右子树为空说明需要回溯,弹栈即可。

代码实现

/** * 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) { vector<int> res; stack<TreeNode*> stk; TreeNode *curpoint = root; while (curpoint) { if (curpoint->left) { stk.push(curpoint); curpoint = curpoint->left; } else { res.push_back(curpoint->val); if (curpoint->right) { curpoint = curpoint->right; } else { //右子树遍历完毕 curpoint = NULL; } } while (!curpoint && !stk.empty()) { //回溯切换到右子树中 res.push_back(stk.top()->val); curpoint = stk.top()->right; stk.pop(); } } return res; } };
最新回复(0)