c语言中无递归的前序遍历
请帮助我找到它为以下输入树提供分段错误的错误。“-1”表示空。该代码对于小输入和大输入本地工作良好,但当我在线提交时,它给出了分段错误。请帮我理解c语言中无递归的前序遍历,c,data-structures,binary-tree,C,Data Structures,Binary Tree,请帮助我找到它为以下输入树提供分段错误的错误。“-1”表示空。该代码对于小输入和大输入本地工作良好,但当我在线提交时,它给出了分段错误。请帮我理解 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; typedef struct TreeNode treenode; treenode* treenode_new(int val) { treeno
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
typedef struct TreeNode treenode;
treenode* treenode_new(int val) {
treenode* node = (treenode *) malloc(sizeof(treenode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
typedef struct stack {
unsigned capacity;
int top;
treenode **array;
}Stack;
Stack * createStack(unsigned capacity){
Stack * stack= (Stack*)malloc(sizeof(Stack));
stack->capacity = capacity;
stack->top=-1;
stack->array = (treenode**)malloc(capacity*sizeof(treenode*));
}
int isFull(Stack * stack){
return stack->top==stack->capacity-1;
}
int isEmpty(Stack * stack){
return stack->top==-1;
}
void push(Stack * stack , treenode * item){
if(isFull(stack)){
return;
}
stack->array[++stack->top]= item;
}
treenode * peek(Stack * stack){
if(isEmpty(stack)){
return NULL;
}
return stack->array[stack->top];
}
treenode * pop(Stack * stack){
if(isEmpty(stack)){
return NULL;
}
treenode *node = stack->array[stack->top--];
return node;
}
int* preorderTraversal(treenode* A, int *len1) {
if(A==NULL){
*len1=0;
return NULL;
}
int* Arr = (int *)malloc(5000*sizeof(int));
Stack *s= createStack(5000);
push(s, A);
int i =0;
treenode *temp;
while(!isEmpty(s)){
temp = pop(s);
Arr[i++]=temp->val;
if(temp->right){
push(s,temp->right);
}
if(temp->left){
push(s , temp->left);
}
}
*len1= i;
return Arr;
}
输入:
359 129 97 98 93 106 27 61 -1 173 40 78 22 152 99 114 47 69 -1 -1 110 144 14 56 165 174 49 1 57 126 123 100 30 -1 -1 -1 161 13 139 2 85 128 119 177 -1 169 135 77 112 50 17 140 138 58 -1 -1 105 -1 -1 -1 -1 70 -1 -1 102 -1 -1 103 -1 176 -1 -1 115 132 154 125 5 -1 108 36 32 7 -1 -1 148 -1 153 16 130 72 -1 -1 95 116 48 104 -1 -1 20 156 -1 -1 88 -1 142 175 -1 64 133 83 94 -1 4 71 101 -1 -1 -1 -1 42 -1 -1 -1 -1 134 166 28 92 33 82 74 45 -1 -1 168 -1 9 -1 44 26 -1 -1 170 6 -1 -1 89 143 160 -1 68 178 111 167 -1 109 151 -1 -1 -1 81 23 -1 -1 -1 -1 -1 -1 66 11 10 179 15 96 -1 127 18 163 -1 -1 24 29 -1 -1 -1 -1 -1 34 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 21 118 -1 31 -1 35 -1 37 -1 122 162 3 -1 -1 -1 121 59 -1 -1 -1 19 158 157 -1 171 84 46 149 -1 -1 -1 -1 76 147 54 150 -1 -1 -1 -1 63 62 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 86 43 55 -1 -1 -1 -1 172 120 -1 -1 91 155 8 107 -1 -1 -1 164 -1 -1 113 -1 73 137 -1 -1 39 -1 -1 41 -1 -1 -1 75 146 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 90 -1 145 -1 -1 117 51 -1 -1 136 -1 79 80 -1 53 52 -1 -1 -1 159 -1 -1 -1 60 -1 -1 -1 131 -1 38 12 -1 -1 -1 -1 124 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 67 65 -1 87 -1 25 -1 141 -1 -1 -1 -1
您忘了返回堆栈
,当您在main中接收它时,您应该返回它
Stack *s= createStack(5000);
如果不从
createStack
返回已分配的stack
,使用s
将导致分段错误
此代码不完整。请将您的问题更新为。实际问题就在这里。以上是我的解决方案。您可以尝试在此处运行代码。您正在泄漏s
@SelçukCihan指向的内存。请详细说明。如何修复?@AmitChawla在返回Arr之前,只需执行free(s)代码>。但是,这可能不是seg故障的原因。是。一个错误。但同样的问题依然存在。还有什么方法可以提高复杂性吗?@AmitChawla只需分配更多的内存,而不仅仅是5000
个元素。可能是300000个左右
Stack *s= createStack(5000);