编写最简单的二叉树

编写最简单的二叉树

 

二叉树结构

 

源码

-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

时间: 2025-01-21 06:28:23

编写最简单的二叉树的相关文章

中文字符-如何用C语言编写一个简单的输入法程序,要求可以输入汉字。

问题描述 如何用C语言编写一个简单的输入法程序,要求可以输入汉字. 不太清楚汉字在计算机中是如何存储的,想知道例如微软的智能ABC以及搜狗输入法是怎样实现拼音拼写下的汉字输入. 解决方案 首先要有一个汉字的编码库,比如GB2312编写的是拼音输入法的话,还要建立一个拼音与汉字对应的数据库然后根据用户输入的拼音,提示出对应的汉字(汉字的优先顺序由数据库决定,同时还可以学习该用户的使用习惯)如果输入法还支持智能联想输入的话,还要加入词库(也有优先级),这样可以根据前一个字来推断出下一个可能的字 解决

怎么用Java编写一个简单的登录系统?可以注册账号的那种

问题描述 怎么用Java编写一个简单的登录系统?可以注册账号的那种 数据库用的是MySQL,但Java操作方面的不知道怎么入手,求大神指点啊,有实例参考就更好了,谢谢 解决方案 import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.awt.Container; import java.util.*; import java.sql.*; class Login extends JFrame im

pdf-求教:如何用c++编写一个简单的PDF文件检测工具?

问题描述 求教:如何用c++编写一个简单的PDF文件检测工具? 想编写一个在Windows下的用c++编写的程序能够检测PDF中是否有恶意代码,求高手帮忙. 解决方案 和编写防病毒软件类似,可以通过特征代码判断.先要建立一个特征库.

初学者 用visual studio中的C#编写一个简单的电子词典 在线等 求帮助

问题描述 初学者 用visual studio中的C#编写一个简单的电子词典 在线等 求帮助 求大神用visual studio2010帮忙编一个简单电子词典的程序,在线等 新人初学者求帮助 解决方案 很简单啊,写个数组就行了 解决方案二: 如果是像上面这样的电子词典,很容易解决.1.使用INI进行保存条目.(想要了解INI可以参考:http://www.cnblogs.com/Ray-chen/archive/2011/11/14/2248496.html)2.使用StreamWriter来读

语言-试编写算法,求二叉树T中结点a和b的最近共同祖先。

问题描述 试编写算法,求二叉树T中结点a和b的最近共同祖先. 试编写算法,求二叉树T中结点a和b的最近共同祖先.二叉链表类型定义:typedef struct BiTNode { TElemType data; struct BiTNode lchild*rchild;} BiTNode *BiTree;可用栈类型Stack的相关定义:typedef struct { BiTNode *ptr; // 二叉树结点的指针类型 int tag; // 0..1} SElemType; // 栈的元素

sql-试编写一个简单SQL脚本程序,创建工资表并完成计算实发工资的任务。

问题描述 试编写一个简单SQL脚本程序,创建工资表并完成计算实发工资的任务. 假设有职工工资表:R(职工号,姓名,基本工资,附加工资,房租,水电,应发工资,税款,实发工资)缴纳个人所得税的规定如下:个人收入>5000,税率20%个人收入>2000,税率10%个人收入>800,税率5%个人收入<800,免税工资的计算方法:(1)应发工资=基本工资+附加工资(2)采取分段计算税款的算法,超出5000部分收20%,2000-5000之间部分收10%,以此类推.(3)实发工资=应发工资-税

界面-基于WinPcap,编写一个简单的数据包捕获程序

问题描述 基于WinPcap,编写一个简单的数据包捕获程序 * 功能要求: 1) 要求提供图形界面(类似Wireshark),可以捕获网络数据包:提供包过滤功能,可以输入过滤表达式:可以指定时段抓包:显示指定数据包的内容: 2) 提供网络数据包统计功能:提供输入IP地址,向指定IP地址发送数据包 3) 提供数据转储功能,将捕获到的数据包存储到磁盘文件,并可以读取转储的文件 4) 界面美观.大方 解决方案 一个简单的摄像头视频浏览和捕获的程序(转载)WinPcap捕获数据包 解决方案二: ** 看

Hadoop的环境搭建,和编写一个简单的hadoop job

hadoop 入门: 0hadoop的简要介绍 google之所以能够成功,一个重要的技术就是map-reduce.map-reduce是google为大规模的.分布式数据进行处理的一种编程模式. 而本文介绍的hadoop是apache的开源map-reduce实现.本文不过多的介绍map-reduce,主要精力放在hadoop的配置和编写一个简单的haoop程序上 对map-recude感兴趣的朋友可以进一步阅读参考文献. 1 hadoop服务器的安装: hadoop是一个分布式的处理框架,本

c++-写一个简单的二叉树遇到了segmentation fault :11问题,求助

问题描述 写一个简单的二叉树遇到了segmentation fault :11问题,求助 本人小白,写了个简单的二叉树练习一下,代码如下,运行时会出现segmentation fault :11错误,求助各位大大帮忙看看是什么原因? #include <iostream> #include <fstream> using namespace std; class Node { private: int content; Node *left; Node *right; public