[leetcode]Binary Tree Preorder Traversal

先序遍历的非递归版本也是和中序遍历相似,不停处理当前节点,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;
    }
};

  

posted @ 2013-11-11 23:09  阿牧遥  阅读(169)  评论(0编辑  收藏  举报