LeetCode Binary Tree Postorder Traversal

/**

 * 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) {

        vector<int> path;

        vector<TreeNode*> stack;

        if (root != NULL) {

            stack.push_back(root);

        }

        TreeNode* last = NULL;

        

        while(!stack.empty()) {

            TreeNode* cur = stack.back();

            

            if (cur->left == NULL && cur->right == NULL) {

                path.push_back(cur->val);

                stack.pop_back();

                last = cur;

                continue;

            }

            

            if (last != NULL && (cur->left == last || cur->right == last)) {

                path.push_back(cur->val);

                stack.pop_back();

                last = cur;

                continue;

            }

            

            while (cur != NULL) {

                if (cur->right != NULL) stack.push_back(cur->right);

                if (cur->left != NULL) stack.push_back(cur->left);

                cur = cur->left;

            }

        }

        

        return path;

    }

};

Note: Recursive solution is trivial, could you do it iteratively? 那就写个非递归的呗!通用算法见 LeetCode Binary Tree Inorder Traversal

第二轮:

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

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

   1

    \

     2

    /

   3

 

return [3,2,1].

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

还是用老方法:

 1 /**

 2  * Definition for binary tree

 3  * struct TreeNode {

 4  *     int val;

 5  *     TreeNode *left;

 6  *     TreeNode *right;

 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 8  * };

 9  */

10 class Frame {

11 public:

12     TreeNode* node;

13     int stage;

14     Frame(TreeNode* n = NULL, int s = -1) : node(n), stage(s) {}

15 };

16  

17 class Solution {

18 public:

19     vector<int> postorderTraversal(TreeNode *root) {

20         vector<int> res;

21         

22         stack<Frame> stk;

23         stk.push(Frame(root, -1));

24         

25         while (!stk.empty()) {

26             Frame& cf = stk.top();

27         

28             if (cf.node == NULL) {

29                 stk.pop();

30                 continue;

31             }

32             

33             cf.stage++;

34             TreeNode* node = cf.node;

35             

36             switch(cf.stage) {

37                 case 0: stk.push(Frame(node->left)); break;

38                 case 1: stk.push(Frame(node->right)); break;

39                 case 2: 

40                     res.push_back(node->val);

41                     stk.pop();

42             }

43         }

44         return res;

45     }

46 };

 

你可能感兴趣的:(LeetCode)