我正在编写一个Add函数,以非递归方式将节点添加到二叉树中。 我遇到的问题是只能生成一级深度二叉树。我调试了它,我知道问题在哪里,但无法弄清楚如何修复它。也许新鲜的眼睛会看到我不会... 问题是我的临时节点在每次新函数调用时都被重置为根值,因此,线性地添加节点。 无论如何,这是功能:
void BinaryTreeNonRec::add(int num){
treeNode *temp, *parent;
if (root==NULL) {
root = new treeNode;
root->data=num;
root->left=0;
root->right=0;
temp=root;
printf("value is root \n");
} else {
temp=root;
while (temp!=NULL) {
if (num <= temp->data){
parent = temp;
temp=temp->left;
//root =temp;
printf("value is to the left \n");
} else {
parent =temp;
temp=temp->right;
//root=temp;
printf("value is to the right \n");
}
}
parent = new treeNode;
parent->data=num;
parent->left=NULL;
parent->right=NULL;
temp=parent;
}
}
感谢您提供任何帮助。
答案 0 :(得分:2)
您没有将新节点添加到树中,只是向下运行树并使用新节点填充父节点,但从不将其添加到树中,请更改以下代码:
parent = new treeNode;
parent->data=num;
parent->left=NULL;
parent->right=NULL;
temp=parent;
要:
treeNode *newNode = new treeNode;
newNode->data = num;
newNode->left = NULL;
newNode->right = NULL;
//Now insert the new node BELOW parent
if(num <= parent->data)
parent->left = newNode;
else
parent->right = newNode;
答案 1 :(得分:1)
问题可能是您从未将新节点添加到树中。
parent = new treeNode;
parent->data=num;
parent->left=NULL;
parent->right=NULL;
temp=parent;
您将新节点分配给temp和parent,它们是临时变量,因此不存在于函数外部。您需要做的是将新节点分配给parent-&gt; left或parent-&gt; right,具体取决于新输入所在的哪一侧,以便将其链接到树中。因此,您想要做的事情如下:
temp = new treeNode;
temp->data=num;
temp->left=NULL;
temp->right=NULL;
if(num < parent->data)
parent->left = temp;
else
parent->right = temp;
答案 2 :(得分:0)
<强> ALGO 强>
<强>代码强>
private void insertItrInBST(int num){
Node temp = root,parent = root;
if(root == null){
root = getNewNode(num);
}else{
temp = root;
while(temp != null){
if(num <= root.data){
parent = temp;
temp = temp.left;
}else{
parent = temp;
temp = temp.right;
}
}
Node newNode = getNewNode(num);
if(num <= parent.data){
parent.left = newNode;
}else{
parent.right = newNode;
}
}
}