a********r 发帖数: 218 | 1 vector postOrderTraversal(TreeNode* root)
{
static vector list;
if(!root)
return list;
postOrderTraversal(root->left);
postOrderTraversal(root->right);
list.push_back(root->val);
return list;
}
如何改正? |
A*****i 发帖数: 3587 | 2 别用static直接传引用用postOrderTraversal(TreeNode * root, vector &list)
然后把list在另一个wrapper里面声明同时在这个wrapper里面调用postOrder这个 |
d*****5 发帖数: 1920 | 3 不懂c++, 觉的static list不能放里面。
list要么static放外面,要么当参数传到recursive function里面。 |
b******g 发帖数: 3616 | 4 如果不改leetcode上函数的interface的话可以这样写:
vector postOrderTraversal(TreeNode* root)
{
vector list,temp;
if(!root)
return list;
list = postOrderTraversal(root->left);
temp = postOrderTraversal(root->right);
list.insert(list.end(),temp.begin(),temp.end());
list.push_back(root->val);
return list;
}
感觉这题真正难的是万一面试官要求必须用iterative算法,如果还有空间复杂度要求。 |
m*********a 发帖数: 3299 | 5 recursive的方法
vector postorderTraversal(TreeNode *root) {
vector result;
postorderTraversalRecr(root,result);
return result;
}
void postorderTraversalRecr(TreeNode *root,vector&result) {
if (root==NULL) return;
postorderTraversalRecr(root->left,result);
postorderTraversalRecr(root->right,result);
result.push_back(root->val);
}
【在 a********r 的大作中提到】 : vector postOrderTraversal(TreeNode* root) : { : static vector list; : if(!root) : return list; : postOrderTraversal(root->left); : postOrderTraversal(root->right); : list.push_back(root->val); : return list; : }
|