2015阿里秋招其中乙個演算法題(經典)

2021-06-29 03:31:25 字數 1067 閱讀 9733

寫乙個函式,輸入乙個二叉樹,樹中每個節點存放了乙個整數值,函式返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程式效率

實現方法很簡單,遍歷一遍二叉樹,找出最大最小,一相減就可以求出最大的差值

之前在做題的時候居然寫遞迴的方法求值,後面測試了一下,果然結果不對

只要是非遞迴的的方法遍歷都可以很容易找出最大值最小值,效率也比較高,時間複雜度為o(n)。

下面是我用非遞迴從上往下遍歷二叉樹的方法

用佇列容器即可方便實現。

我寫的**:

#include #include #include using namespace std;  

typedef struct binarytreenode

binarytreenode ;

int maxt(binarytreenode *proot)

queueqtree;

qtree.push(proot);

while(!qtree.empty())

else

if(min>pnode->m_nvalue)

qtree.pop();

if(pnode->m_pleft)

qtree.push(pnode->m_pleft);

if(pnode->m_pright)

qtree.push(pnode->m_pright);

}return max-min;}

//以先序的方式構建二叉樹,輸入-1表示結點為空

void createbinarytree(binarytreenode *&proot)

else

}

void printinorder(binarytreenode *&proot)

} int _tmain(int argc, _tchar* argv)

隨機顯示陣列的其中乙個 演算法丨陣列

記憶體的工作原理 鍊錶存在類似的問題。在需要讀取鍊錶的最後乙個元素時,不能直接讀取,因為不知道它的位址,必須先訪問元素 1,從中獲取元素 2,依次類推。需要讀取所有元素時,鍊錶的效率很高 如果需要跳躍,鍊錶的效率是很低的。陣列與此不同 假設有乙個陣列,它包含五個元素,起始位址為00,那麼元素 5的位...

多表關聯刪除和修改其中乙個表

update from 語法是早就知道的,今天把delete琢磨出來了 記錄以備忘 delete a from t sms send a,t sms diaocha send b where b.dcid 10 and a.dxnrid b.dxnrid and a.fssj b.fssj upda...

多執行緒其中乙個沒執行 關於pthread join

剛才發現乙個問題。其實很簡單。為了驗證多執行緒寫了乙個雙線程 分別列印一句話。如下 include include void thread void int main void for i 0 i 3 i printf this is the main process.n return 0 編輯之後...