【发布时间】:2016-08-12 13:26:18
【问题描述】:
我正在尝试找到二叉树的最小值。每次我运行我的代码时,我都会得到一个长的 5 位数字,例如“32675”。我很确定我对指针的理解是错误的,但我并不积极。如果我能得到一些建议,我将不胜感激。谢谢!
节点定义
@interface Node:NSObject {
@property (nonatomic, strong) Node *left;
@property (nonatomic, strong) Node *right;
@property (nonatomic, assign) int *value;
}
-(id)initWithValue:(int)val {
self = [super init];
if(self) {
self.value = &(val);
self.left = nil;
self.right = nil;
}
return self;
}
插入树算法
-(void)insertValue:(int)value {
Node *node = [[Node alloc] initWithValue:value];
[self insertNode:node];
}
-(void)insertNode:(Node *)node {
if (root == nil) {
root = node;
} else {
[node insertNode:node];
}
}
插入节点算法
-(void)insertNode:(Node *)node{
if (node.value < self.value) {
[self insertOnLeft:node];
} else {
[self insertOnRight:node];
}
}
-(void)insertOnLeft:(Node *)node {
if (self.left == nil) {
self.left = node;
} else {
[self.left insertNode:node];
}
}
-(void)insertOnRight:(Node *)node {
if (self.right == nil) {
self.right = node;
} else {
[self.right insertNode:node];
}
}
3 个值进入我的树:
[tree insertValue:4];
[tree insertValue:6];
[tree insertValue:2];
int min = [tree findMinimum];
调用Tree的findMinimum方法
-(int)findMinimum {
assert(root != nil);
return [root findMinimum];
}
哪个调用的 root 的 findMinimum - root 是一个节点
-(int)findMinimum {
Node *node = self;
int min = 0;
while (node != nil) {
min = *(node.value);
node = node.left;
}
return min;
}
【问题讨论】:
-
如果您添加
Node类型的定义和insertValue使用的算法,它将帮助人们帮助您 -
当然,我在上面添加了更多信息。谢谢!
-
您的属性
value无疑应该是int类型而不是int *- 它是一个原始值而不是(对象)指针。所以你的initWithValue:可能做错了,你的findMinimum也是。如果此评论为您提供了足够的线索来找到您的问题,请为您的initWithValue添加代码。 -
成功了,非常感谢!
标签: objective-c tree nodes