问题
I'm somewhat confused between the logic of calculating the height of 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, since it gives the correct answer for below code :-
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'm confused because many of other SO answers shows the logic for calculating height as per Code 1
Contradictory logics
- Finding height in Binary Search Tree
- Height of a binary tree
UPDATE:
All, I've a basic doubt as to what is exactly the height of tree ?
1. Is it the no of nodes between the root and deepest node of tree ( including both - the root & deepest node ) ?
2. Is it the no of edges between the root and deepest node of tree ?
OR
3. Is it just the matter of implementation of every individual - Both approaches are correct ?
回答1:
The difference all lies in if an empty tree has height -1 or 0.
According to Wikipedia:
The height of a node is the length of the longest downward path to a leaf from that node. The height of the root is the height of the tree. The depth of a node is the length of the path to its root (i.e., its root path).
and
The root node has depth zero, leaf nodes have height zero, and a tree with only a single node (hence both a root and leaf) has depth and height zero. Conventionally, an empty tree (tree with no nodes, if such are allowed) has depth and height −1.
So you might be right - the second one agrees about this.
Of course, these are all definitions - I would not be too amazed to see a definition that agrees with the first version.
回答2:
Code 0 will count the root as height 1 (root should be 0). Which means all subsequent trees will be one too many
回答3:
Your example is of height 3 (t4 is a root, t4.left is t2, t2.left is t1) if your understanding of height is (1 root node is of height 1, root node with a child or two is of height 2, etc)
t4.left = t2;
t4.right = t5;
t2.left = t1;
t2.right = t3;
So code 1 is right :))
来源:https://stackoverflow.com/questions/17449845/confused-height-of-binary-tree