gpt4 book ai didi

c++ - 打印的二叉树问题。用户输入不打印任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:25 25 4
gpt4 key购买 nike

我正在尝试通过用户输入创建和打印二叉树,但它不起作用。我正在提供输入 8 3 10 1 6 14 4 7 13 -1 但没有打印任何内容。我做错了什么?

#include<iostream>
#include<queue>
using namespace std;
class node
{public:
int data; //data for node
node* left;//pointer for left subtree
node* right;//pointer for right subtree
node(int d):data(d),left(NULL),right(NULL) //constructor
{

}
};

node* createTree() //creating tree
{
int d;
cin>>d;
if(d==-1)
{
return NULL; //when user inputs -1 return NULL
}

node* root=new node(d);
root->left=createTree();
root->right=createTree();
return root;
}

void printTree(node* root)
{
if(root==NULL)
{
return; //when null is encountered return
}

cout<<root->data<<" ";
printTree(root->left); //printing recursively left subtree
printTree(root->right);//printing recursively right subtree
}

int main()
{
node* root=createTree();
printTree(root);
return 0;
}

最佳答案

您的程序仍在等待输入。我将尝试用调用图来解释原因。假设您使用输入 8 3 10 1 运行程序.这将创建一个函数调用树,如下所示:

                                                     (next input)
/
(4, input=1)
/ \
(3, input=10) (waiting...)
/ \
(2, input=3) (waiting...)
START: / \
(1, input=8) (waiting...)
\
(waiting...)

在这里,每个标记为 waiting... 的节点对应于对 createTree 的调用,总是会通过 cin>>d; 询问用户输入陈述。要完成这棵树,您实际上需要输入 8 3 10 1 -1 -1 -1 -1 -1 , 结束每个等待节点。另外,请注意这棵树是非常线性的,因为您插入的元素深度优先。您可以将输入结构化为 8 3 -1 -1 10 -1 -1 ,这将创建以下树:

         null
/
(3)
/ \
/ null
(8)
\ null
\ /
(10)
\
null

所以你不致力于线性树。如果你想创建一个平衡树,你可以做的一件事是首先将所有输入读入 std::vector<int>直到第一个-1被读取,然后使用该 vector 以广度优先 顺序插入元素。或者,您可以使用二叉搜索树技术逐个插入元素。

关于c++ - 打印的二叉树问题。用户输入不打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com