[当我尝试在数组中添加Object时,显示为segmentfault。我已经尝试了很多方法,但是没有用。任何帮助,将不胜感激。我正在创建一个二叉树并返回该二叉树的ZigZagTraversal。
下面是我的代码。
#import <Foundation/Foundation.h>
NSInteger MAXVALUEOFNODE = 100;
@interface Node:NSObject {
@public int data;
@public Node *left;
@public Node *right;
}
@end
@implementation Node
-(id)init:(int) item {
self = [super init];
data = item;
left = right = nil;
return self;
}
@end
@interface BinaryTree:NSObject {
@public Node *root;
}
-(void)printZigZagTraversal;
-(void)addNodeToBT:(Node **)root :(int) parent :(int) child :(char) direction :(Node *[MAXVALUEOFNODE+1])dangling;
@end
@implementation BinaryTree
-(void)addNodeToBT:(Node **)root :(int) parent :(int) child :(char) direction :(Node *[MAXVALUEOFNODE+1])dangling
{
Node *childNode, *parentNode;
if(dangling[child] == NULL){
childNode = (Node*)malloc(sizeof(Node));
childNode->data = child;
childNode->left = NULL;
childNode->right = NULL;
dangling[child] = childNode;
}
else{
childNode = dangling[child];
}
if(dangling[parent] == NULL){
parentNode = [[Node alloc] init:0];
parentNode->data = parent;
parentNode->left = NULL;
parentNode->right = NULL;
dangling[parent] = parentNode;
}
else{
parentNode = dangling[parent];
}
if(*root == NULL){
*root = parentNode;
}
if(direction == 'L'){
parentNode->left = childNode;
}
else{
parentNode->right = childNode;
}
}
-(void)printZigZagTraversal {
NSMutableArray *currentLevel = [[NSMutableArray alloc] init];
NSMutableArray *nextLevel = [[NSMutableArray alloc] init];
bool rightToLeft = true;
[currentLevel addObject: self->root];
while (!(currentLevel.count == 0)) {
Node *node = [currentLevel lastObject];
[currentLevel removeLastObject];
// printf(" %i", node->data);
if (rightToLeft){
if (node->right != nil) {
// [nextLevel addObject:node->right];
}
if (node->left != nil) {
// [nextLevel addObject:node->left];
}
}
else {
if (node->left != nil) {
// [nextLevel addObject:node->left];
}
if (node->right != nil) {
// [nextLevel addObject:node->right];
}
}
if (currentLevel.count == 0) {
rightToLeft = !rightToLeft;
NSMutableArray *temp = currentLevel;
currentLevel = nextLevel;
nextLevel = temp;
}
}
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int edges, parent, child, i;
Node *dangling[MAXVALUEOFNODE+1];
char direction;
for(i=0;i<MAXVALUEOFNODE+1;i++){
dangling[i] = NULL;
}
BinaryTree *tree = [[BinaryTree alloc]init];
scanf("%i", &edges);
for(i=0;i<edges;i++){
scanf("%d %d %c", &parent, &child, &direction);
[tree addNodeToBT:&tree->root :parent :child :direction :dangling];
}
[tree printZigZagTraversal];
[pool drain];
return 0;
}
实际上,我在这里创建一个二叉树并返回该二叉树的ZigZagTraversal。