在 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

更新於: 18-11-2020

111 次瀏覽

開啟您的職業生涯

完成課程並獲得認證

開始
廣告
© . All rights reserved.