OC实现二叉树

这两天又翻了下唐巧的博客 碰巧翻到了讲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;
}

根据这些代码生成的应该是二叉排序树 大家可以随便拿一组数试一试 今天先写这些 还会持续更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容