leetcode2:inorder tranversal
inorder tranversal
/** * 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> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> *p_vec = new vector<int>(); inorderRecur( root, *p_vec); return *p_vec; } void inorderRecur( TreeNode *root, vector<int> & vec) { if( root == NULL ) return; inorderRecur(root->left, vec); vec.push_back( root->val ); inorderRecur(root->right, vec); } };
iterative approach:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ #include <stack> using namespace std; class Solution { public: vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> *p_vec = new vector<int>(); stack<TreeNode*> tree_stack; while(1) { if( root) { tree_stack.push( root); root = root->left; } else { if( tree_stack.empty() ) break; TreeNode * tmp = tree_stack.top(); p_vec->push_back( tmp->val ); tree_stack.pop(); root = tmp->right; } } return *p_vec; } };
preorder 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> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> * vec = new vector<int>(); stack<TreeNode*> my_stack; while(1) { if( root) { vec->push_back(root->val); my_stack.push(root); root = root->left; } else { if(my_stack.empty() ){ break; } TreeNode* tmp = my_stack.top(); my_stack.pop(); root = tmp->right; } } return *vec; } };post order 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> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> * vec = new vector<int>(); stack<TreeNode*> my_stack; while(1) { if( root) { my_stack.push(root); root = root->left; } else { if(my_stack.empty() ){ break; } TreeNode* tmp = my_stack.top(); if(tmp->right != NULL) { root = tmp->right; } else { vec->push_back( tmp->val); my_stack.pop(); root = my_stack.top(); } } } return *vec; } };