我正在尝试实现一种创建节点以插入二叉树(不是 bst)的方法。
struct node{
struct node *left;
int data;
struct node *right;
};
typedef struct node *n;
void createNewNode() {
char r; // stands for response (whether or not a left or right child should be created)
int d; //data to be stored in a node
n newnode = new(struct node); //creates a new node
cout<<"Enter data for the new node:"<<endl;
cin>>d;
newnode->data = d;
cout<<"any left child? y/n"<<endl;
cin>>r;
switch (r) {
case 's':
createNewNode(); // I thought to make it recursive and if a child is going to be created, then the method will call itself all over again
break;
case 'n':
newnode->left = NULL; // if child is not created then pointer is NULL
break;
}
cout<<"any right child? y/n"<<endl;
cin>>r;
switch (r) {
case 's':
createNewNode(); //recursive method again
break;
case 'n':
newnode->right = NULL; // if child is not created then pointer is NULL
break;
}
}
我面临的问题是当我使用递归方法创建左 child 或右 child 时。我认为它没有指向首先创建的父节点的值。我是对还是错?我想问题是我是否正在使用我尝试实现的方法将父节点链接到右子节点或左子节点。
最佳答案
在 createNewNode()
函数中,您只需创建一个新节点并保留它,而无需将它们相互关联!您应该将它绑定(bind)到左指针或右指针。
这是你应该做的:
- 将此函数的输出从
void
更改为n
- 在函数结束时返回新创建的节点
- 在递归调用函数的两个 switch 语句中,相应地将函数调用的输出分配给
newnode->left
或newnode->right
。
关于c++ - 二叉树(不是二叉搜索树)创建新节点和子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627563/