question 1:
我的方法:
問題:
這種方法值比較上下兩個節(jié)點間的差值崖媚,但是如果超過節(jié)點間不是子父節(jié)點的關系的話就無法比較了。所以過不了
別人的方法:
遍歷整個樹嘿棘,將樹轉(zhuǎn)換成列表
對列表進行排序,求出最小的相鄰元素的差值
這種方法對于任意樹都可以旭绒,因為得到列表后再排序鸟妙,所以即使不是搜索樹也可以用這種方法
question 2
找出最少操作次數(shù),使得整個數(shù)組的數(shù)相等
別人的方法:
實際上這是個數(shù)學問題挥吵,因為要求每次有n-1個數(shù)要加1而且最后的結(jié)果是所有的數(shù)要相等重父,所以作為列表中最小的數(shù)必須要每一次都參加。假設m次能夠使得全部的數(shù)相等(都為x)
?????????????????????????????????? sum(nums) +m*(n-1)=x*n?????????
?????????????????????????????????? x=minNums +m
解出答案 m = sum(nums) - n*minNums
證明為什么最小數(shù)每一次都要參加
question 3
給定一個樹忽匈,求每個節(jié)點的所有左子節(jié)點的和減去右子節(jié)點的和的絕對值房午。返回所有絕對值的和
我的答案:
根據(jù)題目要求,要得到所有子節(jié)點的和丹允,所以需要定義函數(shù)來計算子節(jié)點的和郭厌。得到了子節(jié)點的和以后,根據(jù)要求雕蔽,計算和的差值折柠,再累加
缺點:非常的慢。注意上面每次循環(huán)的遞歸次數(shù)批狐。同時注意到getnodesum與得到子節(jié)點的findTilt其實大部分操作都不沖突扇售,可以將這兩個遞歸合并起來
別人的方法:
效果:速度比改進前快5倍