カスケードは、ノードをルートにすることをツリー構造のカテゴリ和
-
12-09-2019 - |
質問
私は右に出てくると私は世界最大の数学者ではないだと言うつもりです。残念ながら、それは私を混乱させていますし、実行可能なソリューションで、いくつかのスタブを持っています。
任意の木と同じように、一つは、彼らがリーフノードで終了するまで、多くの枝がなど多くの支店を持つことができ、多くの支店を持つことができます。私はその値を示し、各葉の上の情報を持っています。
私は何を必要とすることは、それの支店の合計(親)として、各リーフノードの値を要約して、残りのために同じことをやっての問題に取り組む方法についての明確なexplinationですが、もし枝が他の枝で共有されていることを忘れてはなりませんそれ自体に直接関係する各下位レベルの枝と葉の要約であること。
よりよく説明するために:
Root
|----Branch
| |-Leaf 10
|----Branch
| |----Branch
| |-Leaf 20 |-Leaf 30
|----Branch |-Leaf 40
| |----Branch
| |----Branch
| |----Leaf 50
|-Leaf 60
目標:
Root 210
|----Branch 10
| |-Leaf 10
|----Branch 90
| |----Branch 70
| |-Leaf 20 |-Leaf 30
|----Branch 50 |-Leaf 40
| |----Branch 50
| |----Branch 50
| |----Leaf 50
|-Leaf 60
私は最低レベルのメンバー(リーフノード)、ルートノードと枝自分自身を識別することができています。私は、分岐が自身にリンクされている他のブランチ下ダウンまたは直接リーフノードにリンクされているか否かの識別を持っていません。関係がルートに上向きに非常に多くの底にあります。 IEは:ブランチは、それの子供がいる人への参照を持っていませんが、子どもたちは、親が誰であるか知っている。
何かが不明である場合は、尋ねると、私が試してみて、より良い問題を説明しますしてください。
任意の助けいただければ幸います。
解決
OK、これは刺しを与えレフトます。
私はいくつかの擬似コードでこのようにそれについて行くでしょう。
foreach leaf in knownLeafs
parent = leaf.parent //get the leaf parent
parent.total = parent.total + leaf.value //add leaf value to parent total
while parent.parent != null //loop until no more parents, this would be the root
{
current = parent
parent = parent.parent //move up the structure
parent.total = parent.total + current.total
}
next leaf
あなたが親ノードを返し、ノードを与えられます関数を作成する必要があります。
ノードGetParentNodeFrom(ノード)
新しい擬似コードは次のようになります。
foreach leaf in knownLeafs
parent = GetParentNodeFrom(leaf) //get the leaf parent
parent.total = parent.total + leaf.value //add leaf value to parent total
while GetParentNodeFrom(parent) != null //loop until no more parents, this would be the root
{
current = parent
parent = GetParentNodeFrom(current) //move up the structure
parent.total = parent.total + current.total
}
next leaf
申し訳ありませんが、私の間違いは、あなただけではない合計すぎ、葉の値を上に移動する必要があります。 使用される新しいleafValueを参照してください。
foreach leaf in knownLeafs
parent = GetParentNodeFrom(leaf) //get the leaf parent
leafValue = leaf.value
parent.total = parent.total + leafValue //add leaf value to parent total
while GetParentNodeFrom(parent) != null //loop until no more parents, this would be the root
{
current = parent
parent = GetParentNodeFrom(current) //move up the structure
parent.total = parent.total + leafValue
}
next leaf
他のヒント
あなたは、ツリー内のすべてのノードの合計を決定したい?
ツリーウォーキングは、エレガントな再帰的なソリューションに適しています:
public int SumTree (TreeNode n) {
if(n.isLeafNode) return n.value;
return SumTree(n.left) + SumTree(n.right);
}
バイナリツリーを仮定します。