Leetcode Binary Tree Postorder Traversal

来源:互联网 发布:苍之骑士团卡数据下载 编辑:程序博客网 时间:2024/05/17 06:38

递归和非递归。

递归:简单。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> postorderTraversal(TreeNode *root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        v.clear();        dfs(root);        return v;    }        void dfs(TreeNode *root){        if(root == NULL)            return ;        dfs(root->left);        dfs(root->right);        v.push_back(root->val);    }    vector<int> v;};


非递归:我的方法是用两个栈,一个栈s用来遍历节点,另一个栈t用来存节点。最后将栈t的节点pop出来放到vector里面。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> postorderTraversal(TreeNode *root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        stack<TreeNode*> s, t;        vector<int> v;        if(root == NULL)    return v;        t.push(root);        TreeNode *tmp;        while(!t.empty()){            tmp = t.top();            s.push(tmp);            t.pop();            if(tmp->left != NULL)                t.push(tmp->left);            if(tmp->right != NULL)                t.push(tmp->right);        }        vector<int> ans;        while(!s.empty()){            ans.push_back(s.top()->val);            s.pop();        }        return ans;    }};