创建二叉树的函数 赋值失败

创建二叉树的函数 赋值失败

#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

img

你遇到的问题是在 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;
...

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/265804
  • 你也可以参考下这篇文章:三个线程顺序打印ABC?我有十二种做法,彻底掌握多线程同步通信机制
  • 以下回答来自chatgpt:

    回答:

    很抱歉,参考资料中并没有提供创建二叉树的函数和相关代码,因此我无法回答这个问题,建议提供更多上下文信息,包括函数名和代码实现,才能更好地帮助解决问题。同时,统计的节点数为0可能表示程序中没有成功创建任何节点,但也有可能是统计节点数的代码有问题,需要更多信息才能确定问题所在。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^