编写最简单的二叉树

简介:

编写最简单的二叉树

 

二叉树结构

 

源码

-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

目录
相关文章
|
6月前
链式二叉树的部分基础知识点
链式二叉树的部分基础知识点
|
6月前
|
存储
链式二叉树(二叉树看这一篇就够了)
链式二叉树(二叉树看这一篇就够了)
26 0
|
3月前
|
算法 C++
数据结构和算法面试题:实现一个函数,将一棵二叉树转换为它的镜像。(递归或者非递归实现)
数据结构和算法面试题:实现一个函数,将一棵二叉树转换为它的镜像。(递归或者非递归实现)
15 0
|
6月前
|
存储
【二叉树】——链式结构(快速掌握递归与刷题技巧)
【二叉树】——链式结构(快速掌握递归与刷题技巧)
36 0
|
7月前
|
Java
|
8月前
|
Java
java实现树的前序遍历,递归和非递归实现(简单明了)
java实现树的前序遍历,递归和非递归实现(简单明了)
70 0
二叉树的运用(递归)(遍历方式)(简洁.含代码,习题)(一)
二叉树的运用(递归)(遍历方式)(简洁.含代码,习题)
|
存储
学二叉树之前,先来认识下树吧
学二叉树之前,先来认识下树吧
64 0
学二叉树之前,先来认识下树吧
|
C语言 C++
c语言 数据结构二叉树 层次遍历 简单上手代码
1.定义变量 2.创建一棵树 3.初始化队 4.入队操作 5.判断队列是否为空函数 6.出队操作 7.层次循环遍历,打印结果 7.先序遍历,对比结果 8.主函数调用
126 0
|
前端开发 Java 程序员
二叉树的java实现,超级简单讲解版
二叉树的基本定义 简而言之:二叉树就是度不能超过2的树(每个树只能有两个节点) 满二叉树: 一个二叉树,如果每一个层的结点树达到最大值,则在这个树就是满二叉树 完全二叉树: 叶结点只能出现在最下层和次下层,并且最下面那一层的结点都集中在该层最左边的若干位置的二叉树