1

二分木の葉に、ゼロから始まり増加する数字でラベルを付けようとしています。これが私のバイナリツリーの定義です

  type btree = I of int | Node of string * btree * btree

私の関数を適用すると、ツリーの葉に、左端の葉から始まる数字でラベルを付け、ゼロでラベル付けする必要があります。例のために。Node("a", Node("b", I 25, I 54), Node("c", I 12, I 47)) は、ツリー Node("a", Node("b", I 0) を返す必要があります、I 1)、Node("c"、I 2、I 3))。これどうやってするの?コードを書いてみましたが、適切な結果が得られませんでした。これが私のコードです:

 let mark bst =
  let number x = function
  |Node(a, I b, I c) -> Node(a, I x, I (x + 1))
  |Node(a, b, I c) -> Node(a, (number x b), I(x + 1))
  |Node(a, I b, c) -> Node(a, x, (number (x + 1) c)
  |Node(a, b, c) -> Node(a, (number x b), (number x c))
 in number 0 bst

このコードは正常にコンパイルされていますが、左と右のサブツリーに最初から別々に番号が付けられています。つまり 0 です。助けてください!!

4

1 に答える 1