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; } };
浙公网安备 33010602011771号