创建二叉树的函数 赋值失败
#include
//#include
using namespace std;
typedef struct BiNode
{
char val;
BiNode* lchild, * rchild;
}BiNode;
BiNode* BuildBiTree(BiNode* &t)
//先序遍历创建二叉树
{
char ch;
cin >> ch;
if (ch == '@') return nullptr;
//空节点输入@
else
{
BiNode* T = t;
T = new BiNode;
T->val = ch;
BuildBiTree(T->lchild);
BuildBiTree(T->rchild);
}
}
int NodeNumber(BiNode* T)
//统计二叉树节点个数
{
if (T == nullptr)
return 0;
else
return NodeNumber(T->lchild) + NodeNumber(T->rchild) + 1;
}
int main()
{
BiNode* T = nullptr;
BuildBiTree(T);
cout << NodeNumber(T) << endl;
return 0;
}
创建二叉树abc@@@d@@ //空节点用@表示
统计的节点数却为0
你遇到的问题是在 BuildBiTree 函数中赋值失败。一个可能的原因是 t 参数被传递给函数的引用,但它没有被分配给新创建的节点。下面是一个修改过的 BuildBiTree 函数,应该可以解决这个问题:
BiNode* BuildBiTree(BiNode* &t)
{
char ch;
cin >> ch;
if (ch == '@') return nullptr;
else
{
t = new BiNode;
t->val = ch;
BuildBiTree(t->lchild);
BuildBiTree(t->rchild);
}
}
BiNode* T = t;
T = new BiNode;
T->val = ch;
这里不对
应该是
t = new BiNode;
BiNode* T = t;
...
不知道你这个问题是否已经解决, 如果还没有解决的话:回答:
很抱歉,参考资料中并没有提供创建二叉树的函数和相关代码,因此我无法回答这个问题,建议提供更多上下文信息,包括函数名和代码实现,才能更好地帮助解决问题。同时,统计的节点数为0可能表示程序中没有成功创建任何节点,但也有可能是统计节点数的代码有问题,需要更多信息才能确定问题所在。