カスケードは、ノードをルートにすることをツリー構造のカテゴリ和

StackOverflow https://stackoverflow.com/questions/1845439

質問

したがって、この問題はよくあなたの最も簡単なのかもしれD:

私は右に出てくると私は世界最大の数学者ではないだと言うつもりです。残念ながら、それは私を混乱させていますし、実行可能なソリューションで、いくつかのスタブを持っています。

任意の木と同じように、一つは、彼らがリーフノードで終了するまで、多くの枝がなど多くの支店を持つことができ、多くの支店を持つことができます。私はその値を示し、各葉の上の情報を持っています。

私は何を必要とすることは、それの支店の合計(親)として、各リーフノードの値を要約して、残りのために同じことをやっての問題に取り組む方法についての明確な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);
}

バイナリツリーを仮定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top