在 C++ 中验证二叉搜索树中的先序序列
假设我们有一系列数字;我们必须检查它是否是一个二叉搜索树的正确先序遍历序列。我们可以假设序列中的每个数字都是唯一的。考虑以下二叉搜索树 −
因此,如果输入类似于 [5,2,1,3,6],则输出将为 true
为解决此问题,我们将遵循以下步骤 −
itr := -1
low := -infinity
for 初始化 i := 0,当 i < 先序的大小,更新(将 i 增加 1),执行 −
x := preorder[i]
if x < low,则 −
返回 false
while (itr >= 0 and preorder[itr] < x),执行 −
low := preorder[itr]
(将 itr 减少 1)
(将 itr 增加 1)
preorder[itr] := x
返回 true
示例
让我们来看以下实现以加深理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: bool verifyPreorder(vector<int<& preorder) { int itr = -1; int low = INT_MIN; for (int i = 0; i < preorder.size(); i++) { int x = preorder[i]; if (x < low) return false; while (itr >= 0 && preorder[itr] < x) { low = preorder[itr]; itr--; } itr++; preorder[itr] = x; } return true; } }; main(){ Solution ob; vector<int< v = {5,2,1,3,6}; cout << (ob.verifyPreorder(v)); }
输入
{5,2,1,3,6}
输出
1
广告