我在打印二进制搜索树时遇到堆栈溢出(线程1:EXC_BAD_ACCESS(代码=2,地址=0x7ffeef3ffff8))。经过一些检查,在启动inOrderTraversalRecursive方法之前,树的根似乎变为零。不知道为什么根变为零。我知道这一点和这些资源,但到目前为止他们没有帮助我。感谢您抽出时间回答我的问题。
在main. m文件中
#import <Foundation/Foundation.h>
@interface BSTNode : NSObject
@property (nonatomic, assign) int data;
@property (nonatomic, strong) BSTNode *left;
@property (nonatomic, strong) BSTNode *right;
@end
@implementation BSTNode
@end
@interface BST: NSObject
@property (nonatomic,strong) BSTNode *root;
- (void)insertNode:(int)value;
-(void)inOrderTraversal;
@end
@implementation BST
-(instancetype)init{
if (self = [super init]) {
self.root = [self initializeTreeNode];
}
return self;
}
- (BSTNode *)initializeTreeNode {
// By default, |data| is 0, |left| is nil, |right| is nil
return [[BSTNode alloc] init];
}
- (void)insertNode:(int)value {
self.root = [self insertNode:_root withData:value];
}
- (BSTNode *)insertNode:(BSTNode *)root withData:(int)data {
if(!root) {
root = [self initializeTreeNode];
root.data = data;
} else if (root.data >= data) {
root.left = [self insertNode:root.left withData:data];
} else {
root.right = [self insertNode:root.right withData:data];
}
return root;
}
-(void)inOrderTraversal {
[self inOrderTraversalRecursive:self.root];
}
-(void)inOrderTraversalRecursive:(BSTNode *)root {
// inOrder = left - root - right
[self inOrderTraversalRecursive:root.left];
NSLog(@"%d",root.data);
[self inOrderTraversalRecursive:root.right];
}
@end
在主楼里面。M
int main(int argc, const char * argv[]) {
@autoreleasepool {
BST *bst = [BST new];
[bst insertNode:50];
[bst insertNode:30];
[bst insertNode:20];
[bst insertNode:40];
[bst insertNode:70];
[bst insertNode:60];
[bst insertNode:80];
[bst inOrderTraversal];
}
return 0;
}
附言
我基于geeksforgeeks java实现BST设计了BST和BSTNode类。Objective-C中BST(插入、查找、打印、删除)的正确实现是什么?似乎找不到任何地方。
我错过了遍历函数中的nil检查。
-(void)inOrderTraversalRecursive:(BSTNode *)root {
if (!root) {
return;
}
[self inOrderTraversalRecursive:root.left];
NSLog(@"%d",root.data);
[self inOrderTraversalRecursive:root.right];
}
(线程1:EXC_BAD_ACCESS(代码=2,地址=0x7FFEF3FFFF8))
表示您正在访问已经释放的内存块。这意味着您的对象已从内存中释放,您无法再访问它。这就是为什么访问不好。
此外,这可能意味着您正持有指向不再存在的内存地址的悬空指针。
下面是一个二叉查找树,它有一个根节点、一个左节点和一个右节点。代码有效,但我想显示这个二叉查找树,这样我就可以看到图层中的每个节点…这是代码…
我想以这种格式打印二叉查找树: 我想我必须获得树的深度,然后,对于每个级别,在每个元素前后打印一些空格。 我不知道如何继续。 节点类:
//执行顺序遍历的递归方法
我正在学习C++语言,我正在尝试编写BST,但是出了问题。我尝试添加元素到空树,根是NULL,但添加元素后,根仍然是NULL,尽管添加成功了(我在调试模式下看到,节点设置为tmp)。我不知道为什么会这样。
在“二叉树”中,一个外部节点是一个没有任何子节点的节点,无论是左的还是右的,如果我错了,请纠正我-在“二叉树”中,一个外部节点总是空的,因为根据我的课堂讲稿,一个内部节点总是有两个子节点,即使没有创建,但我们假设该内部节点的子节点是空的。那么,如果外部节点为空,我如何访问它呢? 我将这段代码作为BST节点类的一部分编写: Last方法给我nullPointerException
我刚刚开始学习Haskell,我正在尝试编写一个代码来搜索二叉树中的特定值,如果当前返回true,否则返回false这就是我的树结构的样子 我不确定如何继续遍历树并返回值的函数。我确实尝试了BFS和DFS,但我不确定一旦得到值后如何返回。 我的函数应该是什么样子的一个例子