相傳此乃網易二面題
要求現場手寫**判斷乙個數字序列是bst後序遍歷的結果。
如圖所示 對於後續遍歷的排序二叉樹應具有上面的乙個不等式性質 以及 根節點為最後乙個節點的性質
因此**如下
//序列array有n個元素
//如果這n個元素是二叉排序樹的後續遍歷結果 返回true
//否則 返回false
bool isbst(int * array, size_t n)
size_t i = 0;
for (i = 0; i < n-1; ++i) }
if (i == n-1)
size_t l_end = i;
for (i; i < n-1; ++i) }
if (i == n-1)
return false;
}
測試
如下的二叉排序樹
}由於先看的**1 並且完成了演算法。整理參考文獻時才發現,原**2中的作者已經完成了演算法,**看起來比我的要規整多了,大家可以欣賞一下傳送門。
判斷乙個資料序列是否是BST後序遍歷的結果
基本知識 1 bst 二叉排序樹,即父節點大於左子節點,小於等於右子節點 2 後序遍歷 先遍歷左子樹,再遍歷右子樹,最後遍歷根節點 基本思想 後續遍歷得到的陣列的最後乙個元素為根節點,前一部分為左子樹,後一部分為右子樹 前一部分中的元素都小於root 根 後一部分中的元素都大於root 根 所以可以...
三種演算法求乙個數字序列的最長遞增子串行
也有很多部落格寫如何實現最長遞增子串行的演算法,自己查閱了一些資料總結出三種實現的演算法,兩種是常見的處理思路,還有一種是本人自己想出來的演算法,很好理解,但是效率不是特別高。演算法一 將n個數的原序列a n 排序後得到遞增序列b n 則把求a的最長單調遞增子串行問題轉化成求a b序列的最長公共子串...
判斷乙個數字是否是回文
最近碰到乙個題目,其中一步判斷數字是否為回文 由於題目要求是最短時間實現,不要考慮實現本身的效率 1如果直接去實現,就是比較數字的最高位值和最低位,然後再。public boolean isp int x if x temp bit bit為數值位數 int temp1,temp2 for int ...