vector<int> inorderTraversal(TreeNode* root) {
vector<int> v;
helper(root,v);
return v;
}
void helper(TreeNode* root, vector <int> &v) {
if (root == NULL) {
return ;
}
helper(root->left, v);
v.push_back(root->val);
helper(root->right, v);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> v;
helper(root, v);
return v;
}
void helper(TreeNode *root, vector<int> &v) {
if (root ==NULL){
return;
}
v.push_back(root->val);
helper(root->left, v);
helper(root->right, v);
}
vector<int> rightSideView(TreeNode* root) {
vector<int> v;
int max_level=0;
helperUtil(root, 1, &max_level, v);
return v;
}
void helperUtil(TreeNode* root, int level, int *max_level, vector<int> &v) {
if (root == NULL) {
return;
}
if (level > *max_level ) {
v.push_back(root->val);
*max_level = level;
}
helperUtil(root->right, level+1, max_level, v);
helperUtil(root->left, level+1, max_level, v);
}