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; } };