请注意,在你提供的代码中存在一些错误:
在
InOrder
函数中,stack
的使用应该位于函数开头,并且需要加上命名空间std::
。在
InOrder
函数中,变量curr->leftChild
和curr->rightChild
应改为curr->left
和curr->right
。
下面是修改后的代码:
#include <iostream>
#include <stack>
using namespace std;
struct BiTreeNode {
char data;
BiTreeNode* left;
BiTreeNode* right;
};
BiTreeNode* CreatBiTree(char* s, int& i, int len)
{
if (i >= len || s[i] == '#') {
i++;
return nullptr;
}
BiTreeNode* root = new BiTreeNode();
root->data = s[i++];
root->left = CreatBiTree(s, i, len);
root->right = CreatBiTree(s, i, len);
return root;
}
void InOrder(BiTreeNode* root)
{
stack<BiTreeNode*> st;
BiTreeNode* curr = root;
while (!st.empty() || curr != nullptr) {
if (curr != nullptr) {
st.push(curr);
curr = curr->left;
}
else {
curr = st.top();
st.pop();
cout << curr->data;
curr = curr->right;
}
}
}
int main()
{
char tree[] = "AB##C#D###";
int index = 0;
int length = sizeof(tree) / sizeof(tree[0]) - 1; // 不计算字符串结尾的'\0'
BiTreeNode *root = CreatBiTree(tree, index, length);
InOrder(root);
return 0;
}
以上是修正后的代码,可以正确创建二叉树并进行中序遍历。
内容由零声教学AI助手提供,问题来源于学员提问