假设我的树看起来像这样
5
/ \
1 8
/ \
6 9
我写了一个程序来找到它的高度。
65 int height(const TNODE* root) {
66 if (root == NULL) {
67 return 0;
68 } else {
69 int lDepth = height(root->left);
70 int rDepth = height(root->right);
71 if (lDepth > rDepth) {
72 return (lDepth + 1);
73 } else {
74 return (rDepth + 1);
75 }
76
77 }
78 }
运行此方法会为上面的树打印3。但是高度不应该是2,因为那是从根到最远叶子的边数?我在网上搜索过,而且我得到了相反的信息。有人会说我上面的树高3,而其他人说2。
那么我的树上面的高度应该是多少?为什么?
我的方法是否正确?
答案 0 :(得分:3)
术语"身高"这里有点太通用了。根据精确的定义,2或3可能是正确的答案。
例如,如果我说明树的高度是"等级的数量"它包含,3是正确的答案。但是,如果我说树的高度是到达叶子的最大边数,没有多次越过边缘(即没有反向跟踪),那么2就是正确的答案。
根据我的经验,更常见的答案是3.树有3个级别。只有根节点的树的高度为1.我更喜欢这样,因为空树的高度为0。
答案 1 :(得分:1)
关于风格的建议。
int height(const TNODE* root) {
if (root == NULL) {
return 0;
} else {
int lDepth = height(root->left);
int rDepth = height(root->right);
return max ( lDepth, rDepth ) + 1;
}
}