我想写一个函数,将一个节点添加到一个树中,该树以根、节点的值、我想添加新节点的节点的值和一个数字作为参数,根据该数字我将节点添加为左或右子节点(偶数=右子节点,奇数=左子节点)。我不明白我错在哪里,这与BST的概念相同,只是其他条件。如果有任何帮助,我将不胜感激。
例如:
6
/ \
3 20
Tnode*insert(Tnode*root,int data,int father,int leftOrRight);插入(根,50,6,2)树将:
6
/ \
3 50
\
20
Tnode* insert(Tnode* root, int data , int father , int leftOrRight)
{
/* If the tree is empty, return a new node */
if (root == NULL)
return newNode(data);
if (root->data == father)
if (leftOrRight % 2 == 0)
root->right = insert(root->right , data , father , leftOrRight);
else
root->left = insert(root->left , data , father , leftOrRight) ;
return root ;
}
Tnode* newNode(int data)
{
Tnode* node = (Tnode*)malloc(sizeof(Tnode));
node->data = data;
node->left = node->right = NULL;
return node;
}
首先,您编写的代码只检查树的根是父亲。我假设您正在尝试检查整棵树。因此,您需要递归调用其左右子级的插入函数来搜索整棵树的父亲。
Tnode* insert(Tnode* root, int data , int father , int leftOrRight)
{
/* If the tree is empty, return a new node */
if (root == NULL)
return newNode(data);
if (root->data == father)
if (leftOrRight % 2 == 0)
root->right = insert(root->right , data , father , leftOrRight);
else
root->left = insert(root->left , data , father , leftOrRight) ;
insert(root->left , data , father , leftOrRight);
insert(root->right, data , father , leftOrRight);
return root;
}
Tnode* newNode(int data)
{
Tnode* node = (Tnode*)malloc(sizeof(Tnode));
node->data = data;
node->left = node->right = NULL;
return node;
}
如果已经找到了应该输入数据的节点,则不需要递归。
Tnode* insert(Tnode* root, int data , int father , int leftOrRight)
{
/* If the tree is empty, return a new node */
if (root == NULL)
return newNode(data);
if (root->data == father)
{
Tnode * node = newNode(data);
if (leftOrRight % 2 == 0)
{
node -> left = root -> right; // can be node -> right as well
root -> right = node;
}
else
{
node -> left = root -> left; // can be node -> right as well
root -> left = node;
}
}
else
{
// if the current node is not the required node check the leaves
insert(root->left , data , father , leftOrRight);
insert(root->right, data , father , leftOrRight);
}
return root;
}
我真的需要一些帮助来解决我已经努力了几天的地址簿程序。我正在用C语言处理双向链表。我试图在用户输入的位置将节点添加到列表中,从位置0开始。位置将不会被输入超出范围。(在位置0等位置之前,位置1没有插入)但是位置可以重复:将新节点插入在前一个位置占用者之前的位置。(例如:如果位置1有x,并且新节点插入位置1有y,则位置1现在有y,位置2有x) 我需要获取用户输入的位置号,并检索该位置的当前人员,但我
问题内容: 说我有XML: 如何在As和C之间插入“ nodeB”?在PHP中,最好通过SimpleXML?喜欢: 问题答案: 以下是在其他一些SimpleXMLElement之后插入新的SimpleXMLElement的函数。由于使用SimpleXML不可能直接做到这一点,因此它在幕后使用了一些DOM类/方法来完成工作。 以及如何使用它的示例(特定于您的问题): 如果您想/需要解释它是 如何 工
问题内容: 我正在编写一个脚本,要求我在配置文件的特定部分中添加行。例如 之前: 后: 如您所见,添加了新行。我的bash脚本如何插入行?我猜我将需要使用sed。 问题答案: 如果要在特定字符串匹配之后添加一行:
问题内容: 假设我有一个大小为n的对象的ArrayList。现在,我想在特定位置插入另一个对象,比方说在索引位置k(大于0且小于n),并且我希望索引位置k或之后的其他对象向前移动一个索引位置。因此,有什么方法可以直接在Java中执行此操作。实际上,我想在添加新对象时保持列表排序。 问题答案: 要 插入 的特定索引,使用值到ArrayList中: 此方法将移动列表的后续元素。但是您不能保证列表会保持
问题内容: 我只需要在字符串的第3个位置插入字符“ /”即可。 即成为。 我正在使用一些程序GUI来执行此操作,它接受正则表达式模式和替换。 我知道这一定是超级简单的,但我似乎找不到简单的答案。 问题答案: 将字符串[ ] 开头的3个[ ]字符[ ] 替换为(match ,后跟a )。
问题内容: 假设我们有两个数组: 现在,我想在每个数组的第三个元素之后插入。我该怎么做? 问题答案: 可以用来提取数组的部分,联合数组运算符()可以重新组合部分。 这个例子: 给出: