[leetcode] 144. Binary Tree Preorder Traversal

来源:互联网 发布:杭州软件测试在职培训 编辑:程序博客网 时间:2024/05/22 05:23

Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

这道题是前序遍历二叉树,题目难度为Medium。大家可以顺带看下第94题(传送门)中序遍历二叉树和第145题(传送门)后续遍历二叉树。觉得这道题太low的同学可以跳过。

递归版本代码:

class Solution {    void getPreData(TreeNode* n, vector<int>& ret) {        if(!n) return;        ret.push_back(n->val);        getPreData(n->left, ret);        getPreData(n->right, ret);    }public:    vector<int> preorderTraversal(TreeNode* root) {        vector<int> ret;        getPreData(root, ret);        return ret;    }};
非递归版本代码:
class Solution {public:    vector<int> preorderTraversal(TreeNode* root) {        vector<int> ret;        stack<TreeNode*> stk;        TreeNode* p = root;                while(p || !stk.empty()) {            while(p) {                ret.push_back(p->val);                stk.push(p);                p = p->left;            }            p = stk.top()->right;            stk.pop();        }                return ret;    }};

0 0