寫乙個函式,輸入乙個二叉樹,樹中每個節點存放了乙個整數值,函式返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程式效率
實現方法很簡單,遍歷一遍二叉樹,找出最大最小,一相減就可以求出最大的差值
之前在做題的時候居然寫遞迴的方法求值,後面測試了一下,果然結果不對
只要是非遞迴的的方法遍歷都可以很容易找出最大值最小值,效率也比較高,時間複雜度為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 編輯之後...