省市

来源:互联网 发布:软件开发 证书 编辑:程序博客网 时间:2024/04/29 05:31

//

//  TreeNode.h

// 省市

//

//  Created by dlios on 15/2/4.

//  Copyright (c) 2015 dllo. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface TreeNode : NSObject


@property(nonatomic, retain) NSString *name;

@property(nonatomic, retain) NSMutableArray *subnodes;//子节点

@property(nonatomic, assign) TreeNode *superNode;

//父对象在其生命周期可以强引子对象,而子对象绝对不可以强引父对象(造成两个对象无法释放)(所以使用assign


- (id)initWithName:(NSString *)name;

+ (id)treeNodeWithName:(NSString *)name;


- (TreeNode *)getSubnodeWithName:(NSString *)name;

- (TreeNode *)getAnyNodeWithName:(NSString *)name;


+ (void)traverseAllNodes:(TreeNode *)root;

- (NSString *)getFullName;


@end






#import "TreeNode.h"


@implementation TreeNode


- (void)dealloc

{

    [_name release];

    [_subnodes release];      //[_superNode release]不可以写

                              //父对象在其生命周期可以强引子对象,而子对象绝对不可以强引父对象(造成两个对象无法释放)

    [super dealloc];

}



- (id)initWithName:(NSString *)name

{

    self = [super init];

    if (self) {

        [self setName:name];

        [self setSubnodes:[NSMutableArray array]];

        [self setSuperNode:nil];

    }

    return self;

}



+ (id)treeNodeWithName:(NSString *)name

{

    TreeNode *node = [[TreeNode alloc] initWithName:name];

    return [node autorelease];

}



- (TreeNode *)getSubnodeWithName:(NSString *)name

{

    TreeNode *node = nil;

    for (TreeNode *nd in [self subnodes]) {

        if ([[nd name] isEqualToString:name]) {

            node = nd;

            break;

        }

    }

    return node;

}



+ (void)traverseAllNodes:(TreeNode *)root

{

    NSLog(@"%@", [root name]);

    for (TreeNode *node in [root subnodes]) {

        [self traverseAllNodes:node];    //类中的self代表类对象的首地址

        //同上:[TreeNode treeNodeWithName:node];

    }

}



- (TreeNode *)getAnyNodeWithName:(NSString *)name

{

    TreeNode *node = nil;

    if ([[self name] isEqualToString:name]) {

        node = self;

    } else {

        for (TreeNode *snode in [self subnodes]) {

//            if ([[snode name] isEqualToString:name]) {

//                node = snode;

//                break;

//            } else {

                node = [snode getAnyNodeWithName:name];

                if (node != nil) {

                    break;

                }

            //}

        }

    }

    

    return node;

}


- (NSString *)getFullName

{

    NSMutableString *fullName = [NSMutableString string];

    TreeNode *node = self;

    while (node) {

        [fullName insertString:[node name] atIndex:0];

        node = [node superNode];

    }

    return fullName;

}


@end




#import <Foundation/Foundation.h>

#import "TreeNode.h"


int main(int argc, const char * argv[]) {

 

    NSString *filePath = @"/Users/dllo/Desktop/省市/area副本.txt";

    NSString *buffer = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

    NSArray *array = [buffer componentsSeparatedByString:@"\n"];

    NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString:@" 0123456789"];

    

    TreeNode *root = [TreeNode treeNodeWithName:@"root"];

    

    for (NSString *s in array) {

        //找到父结点

        TreeNode *parentNode = root;

        NSRange r = NSMakeRange(0, 2);

        NSString *s1 = [s substringWithRange:r];

        while ([s1 isEqualTo:@"  "]) {

            parentNode = [parentNode.subnodes lastObject];

            r.location += 2;

            s1 = [s substringWithRange:r];

        }

        

        //创建子结点

        NSString *nodeName = [s stringByTrimmingCharactersInSet:cSet];

        TreeNode *childNode = [TreeNode treeNodeWithName:nodeName];

        

        //父子相认

        [parentNode.subnodes addObject:childNode];

        [childNode setSuperNode:parentNode];

    }

    

    TreeNode *node = [root getAnyNodeWithName:@"西岗区"];

    NSLog(@"%@", [node getFullName]);

    



@end


0 0
原创粉丝点击