精品一区二区中文在线,无遮挡h肉动漫在线观看,国产99视频精品免视看9,成全免费高清大全

[劍指Offer]二叉搜索樹的后序遍歷序列 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【salifelink.com - 電腦資料】

   

問題描述:

    輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果,

[劍指Offer]二叉搜索樹的后序遍歷序列

。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

背景知識:

    二叉搜索樹(Binary Search Tree),又叫二叉排序樹:或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

算法描述:

    將數列分為三段,最后一段是最后一個數,也是樹的根;第一段小于根,第二段大于根:

    | 小于根 | 大于根 | 根 |

    然后小于根和大于根這兩段又都是樹,就可以遞歸求解了。

    當樹的大小為0或1時,返回true。

代碼:

<code class="hljs" cpp="">classSolution {public:    bool VerifySquenceOfBST(vector<int>sequence) {        if(sequence.size() == 0) {            return false;        }        returnVerify(sequence);    }    bool Verify(vector<int>sequence) {        intsize = sequence.size();        if(size <= 1) {            return true;        }        //開始切割數列        vector<int>smaller;  //第一段,比root小        vector<int>larger;       //第二段,比root大        //根的值        introot = sequence[size - 1];        //判斷此時是否還在第一段,若已經在第二段,但又回到了第一段        //則返回false        bool isOne = false;        //如果第一個數小于root,則表明有第一段,isOne為true        if(sequence[0] < root) {            isOne = true;        }        for(inti = 0; i < size - 1; i++) {            //比根小            if(sequence[i] < root) {                if(isOne == false) {                    returnfalse;                }                smaller.push_back(sequence[i]);            }            //比根大            else{                if(isOne)                    isOne = false;                larger.push_back(sequence[i]);            }        }        returnVerify(smaller) && Verify(larger);    }};</int></int></int></int></code>

    總結

    應該多弄點測試用例,自己測試完后,再提交

最新文章