先序遍历的非递归版本也是和中序遍历相似,不停处理当前节点,push入栈,同时向左下走,走不成了(NULL)就换右子树。也请看图加深印象。
class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> ans; TreeNode* n = root; stack<TreeNode*> st; while (n != NULL || !st.empty()) { if (n != NULL) { ans.push_back(n->val); st.push(n); n = n->left; } else { n = st.top(); st.pop(); n = n->right; } } return ans; } };