I am somewhat confused between the logic of calculating the height of a binary tree.
Code 1
public static int findHeight(Tree node) { if(node == null) return 0; else { return 1+Math.max(findHeight(node.left), findHeight(node.right)); } }
Code 2
public static int findHeight(Tree node) { if(node == null) return -1; else { return 1+Math.max(findHeight(node.left), findHeight(node.right)); } }
I think the second one is correct as it gives the correct answer for the code below: -
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));
I am confused because many other SO answers show the logic for calculating height by code 1
Conflicting logic
- Search for heights in the binary search tree
- Binary tree height
UPDATE:
All, I have a basic doubt about what is the height of the tree?
1. Is this the node between the root and the deepest node of the tree (including both the root and the deepest node)?
2. Isn't this an edge between the root and the deepest node of the tree?
OR
3. It is only about the realization of each person. Are both approaches correct?
java algorithm data-structures binary-tree tree
tmgr
source share