0
考えられるのは、値が最大のパス(このパスに沿ったノードの値の合計)を見つけることです。編集:ノードは完全に順序付けられていません。つまり、あるパスが別のパスよりも大きな値を持つかどうかを知るためには、パス全体を検索する必要があります。ここでバイナリツリーのノード値の最大合計を計算する関数の実行時間を改善する
は、ツリーのノード・コンストラクターである:ここで
var Node = function(val) {
this.val = val;
this.left = null;
this.right = null;
}
は、パスの最大値を計算する関数です。
function maxPath(top) {
if (top.right === null || top.left === null) return top.val;
return Math.max(top.val, Math.max(top.val + maxPath(top.left), top.val + maxPath(top.right)));
}
機能はかなり非効率的であり、唯一の合理的な答えを返します。約25レベル深い樹木では速い(1秒以内)。私は100レベルの深さのツリーのための最大の和のパスを見つけるしようとしている、そこに自分の道を見つけることができないようです。ランタイムを向上させる方法はありますか?
2回目以降は実行時間が改善されませんか?また、これを行う最善の方法は何でしょうか? – pauld
私は答えを変更しました。 –
申し訳ありませんが、私は重要な区別を忘れていました。ノードは完全に順序付けされていないので、単に左と右の値が大きいパスを下っても、全体のパス総和が最大になることは保証されません。 – pauld