- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从顺序列表和后顺序列表创建二叉树。我有两个结构,Tree 和 TreeNode。我先调用 Tree,然后调用 TreeNode。我不断出现过载并且无法将 TreeNode 转换为 Tree 错误。我不知道如何使用我的函数添加节点。
无法从 addnode 函数返回正确的结构。
创建二叉树的 C 程序。需要遵循给定的结构。需要先调用Tree结构然后调用TreeNode。添加节点功能不起作用,因为我可以添加节点并加载值。不断出现函数重载并且无法将 Tree 转换为 TreeNode 结构错误。
#include "pch.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
struct node * left;
struct node * right;
} TreeNode;
typedef struct trnode
{
TreeNode * root;
} Tree;
//Prototypes for functions.
Tree * buildTree(int * in, int * post, int size);
TreeNode * addNode(int data);
int search(int inArray[], int strt, int end, int value);
Tree * buildUtil(int inArray[], int postArray[], int inStart, int inEnd, int* pIndex);
Tree * buildUtil(int inArray[], int postArray[], int inStart, int inEnd, int* pIndex)
{
int indexvalue;
TreeNode ln;
// Base case only one node
if (inStart > inEnd)
return NULL;
/* Pick current node from Postorder traversal using
postIndex and decrement postIndex */
TreeNode * node = addNode(postArray[*pIndex]);
(*pIndex)--;
indexvalue = *pIndex;
//If this node has no children then return
if (inStart == inEnd)
**//error cannot convert from TreeNode to Tree**
return node;
// Else find the index of this node in Inorder traversal
int iIndex = search(inArray, inStart, inEnd, indexvalue);
// Using index in Inorder traversal, construct left and right
//ERROR CANNOT CONVERT from TREE to node
node-> right = buildUtil(inArray, postArray, iIndex + 1, inEnd, pIndex);
node ->left = buildUtil(inArray, postArray, inStart, iIndex - 1, pIndex);
//ERROR CANT CONVERT FROM TREENODE TO TREE
return node;
}
// buildtree functioni calls helper function buildUtil which is recursive
Tree * buildTree(int * inArray, int * postArray, int size)
{
Tree *tr;
int preindex = size - 1;
tr->root;
return buildUtil(inArray, postArray, 0, preindex, &preindex);
}
/* Function to find index of value in arr[start...end]
The function assume List items that value is postsent in in[] */
int search(int inArray[], int strt, int end, int value)
{
int i;
for (i = strt; i <= end; i++) {
if (inArray[i] == value)
break;
}
return i;
}
TreeNode addNode(int data)
{
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node-> data = data;
node->left = NULL;
node->right = NULL;
// no suitable constructor exists to convert from TreeNode to node
return (node);
}
int main()
{
// values of in and post lists. I can successfully read both arrays in from my read function
// in { 4, 8, 2, 5, 1, 6, 3, 7 };
// post { 8, 4, 5, 2, 6, 7, 3, 1 };
int *in = NULL;
int *post = NULL;
int insize;
int postsize;
insize = 8;
postsize = 8;
Tree * tr = buildTree(in, post, insize);
}
最佳答案
问题代码似乎将“树”与“树节点”混淆了。具体来说,只有一棵树,从树的根节点开始。子节点(左和/或右)附加到树的根节点。然后递归孙子节点(左-左,左-右,右-左,右-右),直到数据用完。
根据问题代码(包括错误处理)考虑此代码:
/*------------------------------------------------------------------------
** Compiler setup.
*/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*------------------------------------------------------------------------
** Memory structures.
*/
typedef struct node
{
int data;
struct node *left;
struct node *right;
} TreeNode_t;
typedef struct Tree_s
{
TreeNode_t *root;
} Tree_t;
/*------------------------------------------------------------------------
** Function to find index of value in arr[start...end]
** The function assume List items that value is postsent in in[]
**
** Returns: EXIT_SUCCESS (0) Success
** ENOENT Search found no matching value.
*/
int Search(int *_O_index, int inArray[], int strt, int end, int value)
{
int rCode = EXIT_SUCCESS;
int index;
for(index = strt; index <= end; index++)
{
if(inArray[index] == value)
break;
}
if(index > end)
{
rCode=ENOENT;
fprintf(stderr, "NOTE: (index[%d] > end[%d])\n", index, end);
goto CLEANUP;
}
//RESULTS:
if(_O_index)
*_O_index = index;
CLEANUP:
return(rCode);
}
/*------------------------------------------------------------------------
** Returns: EXIT_SUCCESS (0) Success
** ENOMEM No memory available.
*/
int AddNode(TreeNode_t **_O_node, int data)
{
int rCode = EXIT_SUCCESS;
TreeNode_t *node = NULL;
node=malloc(sizeof(TreeNode_t));
if(!node)
{
rCode=errno;
fprintf(stderr, "ERROR: node=malloc() failed. errno: %d \"%s\" \n", errno, strerror(errno));
goto CLEANUP;
}
node->data = data;
node->left = NULL;
node->right = NULL;
//RESULTS:
if(_O_node)
{
*_O_node = node;
node = NULL;
}
CLEANUP:
if(node)
free(node);
return(rCode);
}
/*------------------------------------------------------------------------
** Returns: EXIT_SUCCESS (0) Success
** Other errno values Returned by AddNode(), Search(), BuildUtil().
*/
int BuildUtil(TreeNode_t **_O_node, int inArray[], int postArray[], int inStart, int inEnd, int* pIndex)
{
int rCode = EXIT_SUCCESS;
TreeNode_t *node = NULL;
int indexvalue;
int iIndex;
/* Base case only one node */
if(inStart > inEnd)
{
fprintf(stderr, "NOTE: (inStart[%d] > inEnd[%d])\n", inStart, inEnd);
goto RESULTS;
}
/* Pick current node from Postorder traversal using
postIndex and decrement postIndex */
rCode = AddNode(&node, postArray[*pIndex]);
if(rCode)
{
fprintf(stderr, "ERROR: AddNode() failed. errno: %d \"%s\" \n", rCode, strerror(rCode));
goto CLEANUP;
}
(*pIndex)--;
indexvalue = *pIndex;
//If this node has no children then return
if(inStart == inEnd)
{
fprintf(stderr, "NOTE: no children.\n");
goto CLEANUP;
}
// Else find the index of this node in Inorder traversal
rCode=Search(&iIndex, inArray, inStart, inEnd, indexvalue);
switch(rCode)
{
case EXIT_SUCCESS:
break;
case ENOENT:
rCode = EXIT_SUCCESS;
goto RESULTS;
default:
fprintf(stderr, "ERROR: Search(&iIndex,inArray[%p], inStart[%d], inEnd[%d], indexvalue[%d]) failed. errno: %d \"%s\" \n", inArray, inStart, inEnd, indexvalue, rCode, strerror(rCode));
goto CLEANUP;
}
// Using index in Inorder traversal, construct left and right
rCode = BuildUtil(&node->right, inArray, postArray, iIndex + 1, inEnd, pIndex);
if(rCode)
{
fprintf(stderr, "ERROR: BuildUtil(node->right, inArray[%p], postArray[%p], iIndex + 1[%d], inEnd[%d], pIndex[%d]) Failed. errno: %d \"%s\"\n", inArray, postArray, iIndex + 1, inEnd, *pIndex, rCode, strerror(rCode));
goto CLEANUP;
}
rCode = BuildUtil(&node->left, inArray, postArray, inStart, iIndex - 1, pIndex);
if(rCode)
{
fprintf(stderr, "ERROR: BuildUtil(&node->left, inArray[%p], postArray[%p], iIndex + 1[%d], inEnd[%d], pIndex[%d]) Failed. errno: %d \"%s\"\n", inArray, postArray, iIndex + 1, inEnd, *pIndex, rCode, strerror(rCode));
goto CLEANUP;
}
RESULTS:
if(_O_node)
*_O_node = node;
CLEANUP:
return(rCode);
}
/*------------------------------------------------------------------------
** BuildTree function calls helper function buildUtil which is recursive
**
** Returns: EXIT_SUCCESS (0) Success
** ENOMEM No memory available.
** Other errno values Returned by BuildUtil().
*/
int BuildTree(Tree_t **_O_tree, int *inArray, int *postArray, int size)
{
int rCode = EXIT_SUCCESS;
Tree_t *tree = NULL;
int preindex = size - 1;
tree=malloc(sizeof(Tree_t));
if(!tree)
{
rCode=errno;
fprintf(stderr, "ERROR: tree=malloc() failed. errno: %d \"%s\"\n", errno, strerror(errno));
goto CLEANUP;
}
rCode = BuildUtil(&tree->root, inArray, postArray, 0, preindex, &preindex);
if(rCode)
{
fprintf(stderr, "ERROR: tree->root = buildUtil() failed. errno: %d \"%s\"\n", rCode, strerror(rCode));
goto CLEANUP;
}
//RESULTS:
if(_O_tree)
*_O_tree = tree;
CLEANUP:
return(rCode);
}
/*------------------------------------------------------------------------
** Program start.
*/
int main()
{
int rCode = EXIT_SUCCESS;
int in[] = { 4, 8, 2, 5, 1, 6, 3, 7 };
int post[] = { 8, 4, 5, 2, 6, 7, 3, 1 };
int insize = 8;
Tree_t *tree = NULL;
rCode = BuildTree(&tree, in, post, insize);
if(rCode)
{
fprintf(stderr, "ERROR: BuildTree() failed. errno: %d \"%s\"\n", rCode, strerror(rCode));
goto CLEANUP;
}
CLEANUP:
return(rCode);
}
关于创建二叉树和函数重载和隐藏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58783783/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!