8

二分木の高さを計算するロジックが少し混乱しています。

コード 1

public static int findHeight(Tree node) {
    if(node == null)
        return 0;
    else {
        return 1+Math.max(findHeight(node.left), findHeight(node.right));
    }

}

コード 2

public static int findHeight(Tree node) {
    if(node == null)
        return -1;
    else {
        return 1+Math.max(findHeight(node.left), findHeight(node.right));
    }

}

以下のコードに対して正しい答えが得られるので、2番目のものは正しいと思います:-

Tree t4 = new Tree(4);
Tree t2 = new Tree(2);
Tree t1 = new Tree(1);
Tree t3 = new Tree(3);
Tree t5 = new Tree(5);

t4.left = t2;
t4.right = t5;

t2.left = t1;
t2.right = t3;

// Prints "Height : 2" for Code 2
// Prints "Height : 3" for Code 1
System.out.println("Height : " + findHeight(t4)); 

他のSO回答の多くは、コード1に従って高さを計算するためのロジックを示しているため、私は混乱しています

矛盾した論理


アップデート:

すべて、木の高さは正確には何ですか?

1. ツリーのルートと最深ノードの間のノード数ですか (ルートと最深ノードの両方を含む)?

2. ツリーのルートと最も深いノードの間のエッジの数ですか?

また

3. それは各個人の実装の問題ですか? どちらのアプローチも正しいですか?

4

3 に答える 3