作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我为递归二叉树先序遍历编写了以下代码片段:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
std::vector<int> myVec;
public:
vector<int> preorderTraversal(TreeNode* root) {
if(root==NULL)
return vector<int>();
myVec.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
return myVec;
}
};
虽然这段代码运行并产生了预期的输出,但我不确定这是否正确;因为当我调用preorderTraversal(root->left);
和 preorderTraversal(root->right);
我没有使用它们返回的值( vector<int>
s)。所以,
最佳答案
是的,调用一次就对了。如果不是,则 myVec
vector 不会被清除。
事实上,每次调用 preorderTraversal
,除了最上面的那个和从它到左边的路径,都会返回一些没有多大意义的中间状态。如果我是你,我会重构这段代码以隐藏类中的中间值:
class Solution {
private:
std::vector<int> myVec;
void traverse(TreeNode* root) {
if (root == NULL)
return;
myVec.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
public:
vector<int> preorderTraversal(TreeNode* root) {
myVec.clear();
traverse(root);
return myVec;
}
};
关于c++ - 关于前序树遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44634599/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!