240
笔下虽有千言,胸中实无一策

30 Day Challenge Day 3 | Leetcode 144. Binary Tree Preorder Traversal

题解

递归的方法很简单,重点是能不能熟练应用非递归的方法。通常根据条件,需要借助队列(queue)或者栈(stack)的结构。

preorder遍历的顺序是“root ==> left ==> right”,而树的遍历是从根节点(root)开始,所以考虑栈的数据结构,因为它实现数据的“先进后出”。

注意检查空节点。

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        std::vector<int> ret;
        std::stack<TreeNode*> s;

        if(!root) return ret;

        s.push(root);

        while(!s.empty()) {
            TreeNode* n = s.top();
            s.pop();
            ret.push_back(n->val);
            
            if(n->right) s.push(n->right);
            if(n->left) s.push(n->left);
        }

        return ret;
    }
};
posted @ 2020-08-18 03:41  CasperWin  阅读(69)  评论(0编辑  收藏  举报