从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉搜索树,输出所有可能生成此树的数组。
示例:
给定如下二叉树
2
/ \
1 3
返回:
[
[2,1,3],
[2,3,1]
]
思路:
vector<vector<int>> BSTSequences(TreeNode* root) {
if (!root) return {{}};
deque<TreeNode*> q;
q.push_back(root);
vector<int> buf;
vector<vector<int> > ans;
Inner(q, buf, ans);
return ans;
}
void Inner(deque<TreeNode*> &q, vector<int> &buf, vector<vector<int> > &ans) {
if (q.empty()) {
ans.push_back(buf);
return;
}
int size = q.size();
while (size--) {
TreeNode *r = q.front(); q.pop_front();
buf.push_back(r->val);
int children = 0;
if (r->left) {
++children;
q.push_back(r->left);
}
if (r->right) {
++children;
q.push_back(r->right);
}
Inner(q, buf, ans);
while (children--) {
q.pop_back();
}
q.push_back(r);
buf.pop_back();
}
}