1. Introducción al tema
Recorra una matriz de izquierda a derecha y genere gradualmente un árbol de búsqueda binaria insertando continuamente elementos en el árbol. Dado un árbol de búsqueda binario compuesto por diferentes nodos, genere todas las matrices posibles de este árbol.
Ejemplo:
dado el siguiente árbol binario
2
/ \
1 3
volver:
[
[2,1,3],
[2,3,1]
]
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/bst-sequences-lcci Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos ideas para resolver problemas
Esta pregunta equivale a investigar la disposición completa disfrazada, y el método utilizado es "retroceso + recursión + cola de dos extremos". Este método no lo he descubierto yo mismo, y puedo aprender de otros y registrarlo aquí.
Tres, código de resolución de problemas
class Solution {
public:
vector<vector<int>> BSTSequences(TreeNode* root) {
vector<vector<int>> res;
if(!root)
return {
{}};
vector<int> ans;
deque<TreeNode*> q;
q.push_back(root);
dfs(ans, res, q);
return res;
}
void dfs(vector<int>& ans, vector<vector<int>> &res, deque<TreeNode*>& q)
{
if(q.empty())
{
res.push_back(ans);
return;
}
for(int i = q.size(); i > 0; --i)
{
TreeNode* cur = q.front();
q.pop_front();
ans.push_back(cur->val);
int count = 0;
if(cur->left)
{
q.push_back(cur->left);
++count;
}
if(cur->right)
{
q.push_back(cur->right);
++count;
}
dfs(ans, res, q);
for(int j = 0; j < count; ++j)
q.pop_back();
ans.pop_back();
q.push_back(cur);
}
}
};