这两天又翻了下唐巧的博客 碰巧翻到了讲Homebrew的那篇文章,突然想到自己也从来没用oc写过,那么今天正好自己试一试。闲话不说直接就上代码了。
首先是二叉树类
BinaryTreeNode.h
@interface BinaryTreeNode : NSObject
@property (nonatomic, assign) NSInteger value;
///左节点
@property (nonatomic, strong) BinaryTreeNode *leftNode;
///右节点
@property (nonatomic, strong) BinaryTreeNode *rightNode;
+ (instancetype)nodeWithValue:(NSInteger)value;
@end
BinaryTreeNode.m
@implementation BinaryTreeNode
+ (instancetype)nodeWithValue:(NSInteger)value{
BinaryTreeNode *node = [[super alloc]init];
node.value = value;
return node;
}
@end
创建二叉树的方法
+ (BinaryTreeNode *)createTreeWithValues:(NSArray *)values
{
BinaryTreeNode *root = nil;
for (NSInteger i=0; i<values.count; i++) {
NSInteger value = [(NSNumber *)[values objectAtIndex:i]integerValue];
root = [[self class]addTreeNode:root value:value];
}
return root;
}
+ (BinaryTreeNode *)addTreeNode:(BinaryTreeNode *)treeNode withvalue:(NSInteger)value
{
if (!treeNode) { //如果没有根节点,则创建根节点
treeNode = [BinaryTreeNode nodeWithValue:value];
}else if (value <= treeNode.value){
if (!treeNode.leftNode) {
//如果左叶子节点没有值则付给左叶子节点
treeNode.leftNode = [BinaryTreeNode nodeWithValue:value];
}else
{
//如果有值的话那么以左叶子节点为跟节点递归调用
treeNode.leftNode = [[self class]addTreeNode:treeNode.leftNode value:value];
}
}else{
if (!treeNode.rightNode) {
treeNode.rightNode = [BinaryTreeNode nodeWithValue:value];
}else
{
treeNode.rightNode = [[self class]addTreeNode:treeNode.rightNode value:value];
}
}
return treeNode;
}
根据这些代码生成的应该是二叉排序树 大家可以随便拿一组数试一试 今天先写这些 还会持续更新