大家好,本人新手。諮詢大家一個問題。
A為金字塔的頂點,下面有初級會員ABCDEF等若干,每個初級會員下面又有初級會員若干,這樣一直排列下去。
如果E1會員身份升級為一級會員,則A可以擷取提成10塊錢。
但如果他的上線也就是B1身份為一級會員,則10塊錢就歸B1.
請問該用何種思路去統計某個時間段內A的提成呢,也就是A的所有分支的提成必須排除掉B1分支裡的會員資料。
回複內容:
大家好,本人新手。諮詢大家一個問題。
A為金字塔的頂點,下面有初級會員ABCDEF等若干,每個初級會員下面又有初級會員若干,這樣一直排列下去。
如果E1會員身份升級為一級會員,則A可以擷取提成10塊錢。
但如果他的上線也就是B1身份為一級會員,則10塊錢就歸B1.
請問該用何種思路去統計某個時間段內A的提成呢,也就是A的所有分支的提成必須排除掉B1分支裡的會員資料。
遍曆A的子節點,如果不是一級會員,就加入一個線性表裡(表示此節點升格,A可以獲得收益),然後繼續遍曆這個節點
//虛擬碼 擷取到A節點可以獲得收益的後輩節點//topNode為節點對象function getAllChilds(object topNode){ static childArr=[]; foreach(topNode->getAllChilds as index=>tempChildNode){ //如果當前節點不為一級節點 if(!tempChildNode->rankIsOne){ array_push(childArr,tempChildNode); getAllChilds(tempChildNode); } } return childArr;}
不過看題目是某個時間段A的提成,意思好像是節點樹各個節點的rank是會變動的,這個就有點難了
或者在每次節點升格的時候,都算一次收益,以及收益節點,以及時間,寫入資料庫。這樣查詢就只需要一條SQL語句了
遍曆所有節點,把父節點為你要求的一級會員的分支從樹中去掉不就行了麼。……