1. 程式人生 > >【劍指offer24】輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。

【劍指offer24】輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。

   bool VerifySquenceOfBST(vector<int> sequence) {
      return _VerifySequenceOfBST(sequence);
    }
    bool _VerifySequenceOfBST(vector<int> sequence)
    {
        if(sequence.empty())
         {
            return false;
        }
        vector<int>leftTree;
        vector<int>rightTree;
        int len=sequence.size();
        int i=0;
        int root=sequence[len-1];
        for(i=0;i<len-1;i++)
        {
            if(sequence[i]>root)
            {
                break;
            }
        }
        int j=i;
        for(;j<len-1;++j)
        {
            if(sequence[j]<root)
            {
                return false;
            }
        }
        if(i>0)
        {
            for(int k=0;k<i;k++)
        {
            leftTree.push_back(sequence[k]);
        }
        }
        if(i<len-1)
        {
            for(int m=i;m<len-1;m++)
        {
            rightTree.push_back(sequence[m]);
        }
        }
        bool left=true;
        if(i>0)
        {
            left=_VerifySequenceOfBST(leftTree);
        }
        bool right=true;
        if(i<len-1)
        {
            
            right=_VerifySequenceOfBST(rightTree);
        }
        return left&&right;
    }


相關推薦

Offer-Python-搜尋的後續序列

題目:二叉搜尋樹的後續遍歷序列 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。 思路:二叉搜尋樹的特點是,左子樹的值小於根節點的值,右子樹的值大於根節點的值。

offer給定一個double型別的浮點數base和int型別的整數exponent求base的exponent次方

題目要求 給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。 核心思想 兩個要點: << : 左移運算子,num << 1,相當於num乘以2 >> : 右移運算子,nu

offer數值的整數次方

hdp aso gdm iic vue cio as2 npr tez 一、題目: 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 二、思路: 作弊思想 三、代碼: 【劍指o

offer給定一個將其變換為源的映象

題目要求 給定一個二叉樹,將其變換為源二叉樹的映象。 核心思想 遞迴思想,分治呼叫。 完整程式碼如下 public class Solution { public class TreeNode { int val; TreeNode left; TreeNo

輸入一個5位數判斷它是是迴文數即12321是迴文數個位與萬位相同十位與千位相同

直接看程式碼:(這裡增加難度,改成任意位數!) public class Top { public static void main(String[] args) throws IOExceptio

LeetCodeBinary Tree Postorder Traversal 遞迴以及非遞迴演算法

Total Accepted: 15614 Total Submissions: 50928 My Submissions Given a binary tree, return the postorder traversal of its nodes' values.

程式設計師面試一百題-06-判斷整數序列是是二元查詢結果

1-題目 : 輸入一個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果,如果是返回true,不是返回false。 2-示例 : 輸入4、8、6、12、16、14、10,返回true;輸入8、4、6,返回false。 3-思路 : 3.1-後序遍歷中,最後一個元素為樹的根結

判斷一個序列是搜尋序列

#include <iostream> #include <cstring> #include <queue> using namespace std; bool check(int a[],int start,int last) {

把排序陣列轉換為高度最小的搜尋

題目描述:給一個排序陣列(從小到大),將其轉換為一棵高度最小的二叉搜尋樹。 樣例:給出陣列 [1,2,3,4,5,6,7], 返回 首先,先來看一下二叉搜尋樹(也稱為二叉排序樹)的定義:它或者是一棵

lintcode——把排序陣列轉換為高度最小的搜尋

/**  * Definition of TreeNode:  * class TreeNode {  * public:  *     int val;  *     TreeNode *left, *right;  *     TreeNode(int val) {  *         this->

給定有序陣列建立高度最小的查詢

{if (end < start){return null;}int mid = start + (end - start) / 2;TreeNode n=new TreeNode(arr[mid]);n.left=createMinimalBST(arr,start,mid-1);n.right=cr

offer輸入一個整數輸出數二進位制表示中1的個數其中負數用補碼錶示

題目要求 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 核心思路 如果一個整數不為0,那麼這個整數至少有一位是1,如果把這個整數減1,那麼原來整數最右邊的1就會變為0,原來在1右邊的所有0都會變為1。那麼,利用n = n & (n - 1),

offer9、用棧實現隊列

題目 壓入 () ack 用兩個棧 nbsp del emp span 題目 用兩個棧實現隊列。隊列聲明如下,實現appendTail和deleteHead,分別完成在隊列尾部插入節點,和頭部刪除節點的功能。 思路 尾部插入:直接向stack1壓入即可 頭部刪除:先進先出,

Offer26陣列中出現次數超過一半的數字

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 時間限制:1秒;空間限制:32768K;本題知識點:陣列 解題思路

Offer05旋轉陣列的最小數字

題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。 時間

Offer14合併排序的連結串列

題目描述 輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。 時間限制:1秒;空間限制:32768K;本題知識點:連結串列 解題思路 # -*- coding:utf-8 -*- # class ListNode: #

Offer17用棧實現佇列

題目描述 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別 時間限制:1秒;空間限制:32768K 解題思路 由於佇列的特點是先進先出,而棧是先進後出,可以用兩個棧串聯來實現佇列:棧1先進後出,棧1出棧棧2入棧,棧2後進先出,從全域性來看實現了先進先

offer棧實現佇列

用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 public class Solution {        Stack<Integer> stack1 = new Stack<In