C++实现二叉树遍历及高度计算时int函数无返回值报错如何解决
问题原因
报错触发的核心原因是Height函数的空节点判断分支存在语法问题:该函数声明的返回类型为int,但当root == NULL(当前节点为空)时,你直接使用了无返回值的return;语句,不符合语法要求。
修复方案
二叉树空节点的高度约定为0,你只需要把该分支的返回语句补充返回值即可,修改后的Height函数代码如下:
int Height(node *root) { if (root == NULL) { return 0; // 补充返回空节点高度0,替换原无值return } int left_height = Height(root->left); int right_height = Height(root->right); if (left_height > right_height) { return left_height + 1; } else { return right_height + 1; } }
你也可以直接用标准库的max函数简化高度判断逻辑,和原有逻辑完全等价:
int Height(node *root) { if (root == NULL) return 0; return max(Height(root->left), Height(root->right)) + 1; }
额外注意事项
你当前编写的中序遍历Inorder、后序遍历Postorder函数逻辑存在错误,和先序遍历逻辑完全一致,无法输出对应顺序的遍历结果:
- 中序遍历顺序为:遍历左子树 → 输出当前节点值 → 遍历右子树
- 后序遍历顺序为:遍历左子树 → 遍历右子树 → 输出当前节点值
修正后的两个遍历函数代码如下:
void Inorder(struct node *root) { if (root == NULL) { return; } Inorder(root->left); cout << root->data << " "; Inorder(root->right); } void Postorder(struct node *root) { if (root == NULL) { return; } Postorder(root->left); Postorder(root->right); cout << root->data << " "; }
内容的提问来源于stack exchange,提问作者Tanya Gupta
相关产品推荐
相关产品推荐

