二分木の葉に、ゼロから始まり増加する数字でラベルを付けようとしています。これが私のバイナリツリーの定義です
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 です。助けてください!!