Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中无递归的前序遍历_C_Data Structures_Binary Tree - Fatal编程技术网

c语言中无递归的前序遍历

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

请帮助我找到它为以下输入树提供分段错误的错误。“-1”表示空。该代码对于小输入和大输入本地工作良好,但当我在线提交时,它给出了分段错误。请帮我理解

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);