[LeetCode]Binary Tree Inorder Traversal

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

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

   1
    
     2
    /
   3

return [1,3,2].

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1
  / 
 2   3
    /
   4
    
     5

The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

思考:递归

class Solution {
public:
    void DFS(TreeNode *root,vector<int> &ans)
    {
        if(root)
        {
            DFS(root->left,ans);
            ans.push_back(root->val);
            DFS(root->right,ans);
        }
    }
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> ans;
        ans.clear();
        DFS(root,ans);
        return ans;
    }
};

非递归

class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> ans;
        stack<TreeNode *> s;
        TreeNode *p=root;
        while(!s.empty()||p)
        {
            if(p)
            {
                s.push(p);
                p=p->left;
            }
            else
            {
                p=s.top();
                s.pop();
                ans.push_back(p->val);
                p=p->right;
            }
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/Rosanna/p/3466396.html