- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个家谱程序,但我无法从家谱中删除一个节点。我有一个 delete
方法,它获取要删除的节点的名称,找到它,然后将其删除。我释放了 trash
节点,我试图删除的节点,并将其设置为 NULL
,但在我测试它时它仍然存在。我是否应该为节点分配新的左右路径而不是尝试将其设置为 NULL
?
struct node {
char *data;
struct node *left;
struct node *right;
}*child;
void delete(node* root){
char array[13];
node *toDelete;
printf ("Please specify a name to delete\n");
scanf("%s", array);
toDelete = scan(root, array);
if(toDelete == NULL) {
printf("ERROR -- Node does not exist");
} else {
removeChild(&toDelete);
}
}
void removeChild(node **trash){
if((*trash)->left == NULL && (*trash)->right == NULL) { //no parents
free(*trash);
*trash = NULL;
}
else if((*trash)->left == NULL && (*trash)->right != NULL) { //have mother
removeChild((*trash)->right);
}
else if((*trash)->left != NULL && (*trash)->right == NULL) { //have father
removeChild((*trash)->left);
} else{ //have both
removeChild((*trash)->left);
removeChild((*trash)->right);
}
}
最佳答案
对不起。
无论如何,
// free a node and all its children.
// Return # of nodes freed.
int free_node_recursive(node * n){
int total_freed = 1;
// free the left child (if any)
if(n->left != NULL){
free_node_data(n->left);
total_freed += free_node_recursive(n->left);
n->left = NULL;
}
// free the right child (if any)
if(n->right != NULL){
free_node_data(n->right);
total_freed += free_node_recursive(n->right);
n->right = NULL;
}
// actually free the thing.
free(n);
return total_freed;
}
例如。
void delete(node* root){
char array[13];
node *toDelete;
printf ("Please specify a name to delete\n");
scanf("%s", array);
toDelete = scan(root, array);
if(toDelete == NULL) {
printf("ERROR -- Node does not exist");
} else {
free_node_recursive(&toDelete);
}
}
您的问题是,在全局树 (root
) 中,对刚刚删除的节点的引用将仍然存在。沿着树向下的解析器会发现父级中的引用仍然完好无损,并尝试下降到它,发现数据已经空闲
并且不可访问;段错误。
关于c - C语言的家谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655746/
我做到了,但它没有显示答案 当我询问兄弟,姐妹,叔叔,阿姨时 这是我写的,有什么问题吗? /*uncle(X, Y) :– male(X), sibling(X, Z), parent(Z, Y).*
我即将参加考试,需要有关家谱的考试问题的帮助。我以前做过树,但只有这种格式: 数据树 a = 空 |叶一个 |节点a(树a)(树a) 基本上,一棵树要么是空节点,要么是叶节点,或者是一个有两棵树递归跟
有没有办法让子元素跟随其父元素? 问题是,如果只有一个子节点,而父节点有一大段文本,连接器的位置就会变得非常糟糕。我该如何解决? Fiddle demo * {margin: 0; padding:
我正在尝试存储家谱。这是我使用的平台,Zend framework, Mysql, Ajax我搜索了 stackoverflow 我遇到了这篇文章,它对处理对象方面的数据非常有帮助。 "Family
家谱中家谱的算法是怎么做的? 例如 parent A有一个 child B和C。那么,如果 child C将来也生了一个 child 怎么办。它如何使用数据库添加到树中? 我看过 Jit 的 RGra
我对这个任务一无所知。我需要像这样制作家谱 但我无法解决 Main.java 中的 child 问题。对于每个名字,我都必须给 child 写 null 。 这是我的代码:Main.java 。第二个
我使用 CSS 创建了一个家谱。 家谱可以正常工作,但问题是如果一行中的列表太多,它会在行的右端断开该行,并在新行上显示。 如何在不破坏子元素的情况下使这个家谱水平延伸?即使我在页面底部没有水平滚动条
它来 self 的家庭作业。有家谱 a + b / | | \
正如您在下面的代码片段中所看到的,家谱显示得不是很好。那是因为容器不够宽,装不下它。我想通过向容器添加滚动条来解决这个问题,但不幸的是,这不起作用。我在列表中尝试了 nowrap,但无济于事。我有什么
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
我正在尝试用 PHP 做一个传销项目。现在我陷入了 MLM 的二叉树表示。请帮我实现这棵树。 sample tree structre .请帮我在附加图片上构建一个树状结构。 Sample tree
需要帮助!是否可以将此网络树居中 http://bvusolutions.com/tree2.html加载页面后?我还想将它放在 960px 宽度的 div 中,以避免滚动并具有缩放功能。 每次我添加
我是一名优秀的程序员,十分优秀!