您的位置:首页 > 其它

编写最简单的二叉树

2015-10-22 22:26 309 查看
编写最简单的二叉树



二叉树结构



源码

-swift-

//
//  Node.swift
//  swift-TreeStructure
//
//  Created by YouXianMing on 15/10/19.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

import UIKit

class Node: NSObject {

/// 节点名字
var nodeName  : String?

/// 左节点
var leftNode  : Node?

/// 右节点
var rightNode : Node?

/**
便利构造器方法

- parameter nodeWithName: 节点名字

- returns: 节点
*/
init(withName : String?) {

super.init()
nodeName = withName
}
}


//
//  ViewController.swift
//  swift-TreeStructure
//
//  Created by YouXianMing on 15/10/19.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

let rootNode : Node = Node(withName : "A")

override func viewDidLoad() {

super.viewDidLoad()

// 插入节点
insertNode(rootNode, node: Node(withName : "B"))
insertNode(rootNode, node: Node(withName : "C"))
insertNode(rootNode, node: Node(withName : "D"))
insertNode(rootNode, node: Node(withName : "E"))
insertNode(rootNode, node: Node(withName : "F"))

// 便利节点
treeInfomationWith(rootNode)
}

/**
插入节点

- parameter tree: 根节点
- parameter node: 被插入节点
*/
func insertNode(tree : Node, node : Node) {

if tree.leftNode == nil {

tree.leftNode = node
return
}

if tree.rightNode == nil {

tree.rightNode = node
return
}

insertNode(tree.leftNode!, node: node)
}

/**
遍历节点

- parameter node: 节点
*/
func treeInfomationWith(node : Node) {

if node.leftNode != nil {

treeInfomationWith(node.leftNode!)
}

print(node.nodeName)

if node.rightNode != nil {

treeInfomationWith(node.rightNode!)
}
}
}


-objective-c-

//
//  Node.h
//  TreeStructure
//
//  Created by YouXianMing on 15/10/19.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Node : NSObject

/**
*  节点名字
*/
@property (nonatomic, strong) NSString *nodeName;

/**
*  左节点
*/
@property (nonatomic, strong) Node  *leftNode;

/**
*  右节点
*/
@property (nonatomic, strong) Node  *rightNode;

/**
*  便利构造器方法
*
*  @param nodeName 节点名字
*
*  @return 节点
*/
+ (instancetype)nodeWithName:(NSString *)nodeName;

@end


//
//  Node.m
//  TreeStructure
//
//  Created by YouXianMing on 15/10/19.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

#import "Node.h"

@implementation Node

+ (instancetype)nodeWithName:(NSString *)nodeName {

Node *node     = [[[self class] alloc] init];
node.nodeName  = nodeName;

return node;
}

@end


//
//  ViewController.m
//  TreeStructure
//
//  Created by YouXianMing on 15/10/19.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

#import "ViewController.h"
#import "Node.h"

@interface ViewController ()

@property (nonatomic, strong) Node *rootNode;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 根节点
self.rootNode = [Node nodeWithName:@"A"];

// 插入节点
[self insertNodeTree:self.rootNode node:[Node nodeWithName:@"B"]];
[self insertNodeTree:self.rootNode node:[Node nodeWithName:@"C"]];
[self insertNodeTree:self.rootNode node:[Node nodeWithName:@"D"]];
[self insertNodeTree:self.rootNode node:[Node nodeWithName:@"E"]];
[self insertNodeTree:self.rootNode node:[Node nodeWithName:@"F"]];

// 遍历节点
[self treeInfomationWithNode:self.rootNode];
}

/**
*  插入节点
*
*  @param tree 根节点
*  @param node 被插入节点
*/
- (void)insertNodeTree:(Node *)tree node:(Node *)node {

if (tree.leftNode == nil) {

tree.leftNode = node;
return;
}

if (tree.rightNode == nil) {

tree.rightNode = node;
return;
}

[self insertNodeTree:tree.leftNode node:node];
}

/**
*  遍历节点
*
*  @param node 节点
*/
- (void)treeInfomationWithNode:(Node *)node {

if (node.leftNode) {

[self treeInfomationWithNode:node.leftNode];
}

NSLog(@"%@", node.nodeName);

if (node.rightNode) {

[self treeInfomationWithNode:node.rightNode];
}
}

@end


打印结果

2015-10-19 20:05:24.493 TreeStructure[33002:267671] F

2015-10-19 20:05:24.494 TreeStructure[33002:267671] D

2015-10-19 20:05:24.494 TreeStructure[33002:267671] B

2015-10-19 20:05:24.494 TreeStructure[33002:267671] E

2015-10-19 20:05:24.494 TreeStructure[33002:267671] A

2015-10-19 20:05:24.494 TreeStructure[33002:267671] C
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: