简单二叉树实现

来源:互联网 发布:怎么修复微信数据库 编辑:程序博客网 时间:2024/05/16 00:50

二叉树是最简单的树结构,树结构为层次结构,与之对应的是线性结构,例如数组,链表等。经历过的游戏项目中线性表用得比较多,相比之下,树结构用的就比较少了,也许是笔者孤陋寡闻,单方面认为树适用于大数据量的存储,排序等操作,游戏服务器可承载数据量也挺大,但是处理能力和一些硬性要求(内存,硬盘)也有限,再锋利的刀刃用的时间长了也会钝,服务器卡顿会带来客户端非常操蛋的游戏体验,所以为了长久之计,不建议在游戏服上对数据做频繁的排序操作,更别说在数据量很大的情况下了。

以上85.8%为废话

什么是二叉树

和数组的结构比较就会非常清楚了。如图

  • 数组
    数组的结构
  • 二叉树
    二叉树的结构

    码钳

  • c#里递归方法里有修改对象的操作,最好加上ref关键字
  • 插入方式为:相比根节点小放在左节点,比根节点大放到右节点,这样按照中序遍历(根左右)的方式遍历得到的是升序数列。
  • 这棵树为二叉排序树(以下insert方法决定,可以通过一定的遍历方式得到有序数列)

    简单实现(C# in Unity)

using UnityEngine;using System.Collections;using System;/// <summary>///  最简单的二叉树///  wc 2017/5/26/// </summary>public class binary_tree_Node{    public  binary_tree_Node LeftNode;    public  binary_tree_Node RightNode;    public int value;}public class binary_tree {    public binary_tree_Node root;    private string values = "";    //插入    public void Insert(int value) {        insert(ref root,value);    }    private void insert(ref binary_tree_Node node, int value)    {         if(node == null){            node = new binary_tree_Node();            node.LeftNode = null;            node.RightNode = null;            node.value = value;            return;        }        if (value <= node.value)        {            insert(ref node.LeftNode, value);        }        else if (value > node.value)        {            insert(ref node.RightNode, value);        }    }    //前序遍历    public void Preorder()    {        values = "";        preorder(root);        Debug.Log("前序遍历: " + values);    }    private void preorder(binary_tree_Node node)    {        if (node != null)        {            values += node.value + ",";            preorder(node.LeftNode);            preorder(node.RightNode);        }    }    //中序遍历    public void Inorder()    {        values = "";        inorder(root);        Debug.Log("中序遍历: " + values);    }    private void inorder(binary_tree_Node node)    {        if (node != null)        {            inorder(node.LeftNode);            values += node.value + ",";            inorder(node.RightNode);        }    }    //后序遍历    public void PostOrder() {        values = "";        postOrder(root);        Debug.Log("后序遍历: " + values);    }    private void postOrder(binary_tree_Node node)    {        if (node != null)        {            postOrder(node.LeftNode);            postOrder(node.RightNode);            values += node.value + ",";        }    }    //删除    public void DeleteTree() {        deleteTree(ref root);        Debug.Log("删除树");    }    public void deleteTree(ref binary_tree_Node node)    {         if(node != null){            binary_tree_Node nodeLeft = node.LeftNode;            binary_tree_Node nodeRight = node.RightNode;            deleteTree(ref nodeLeft);            deleteTree(ref nodeRight);            node = null;        }    }}public class TestTree : MonoBehaviour{    void Start()    {        binary_tree tree = new binary_tree();        string rands = "";        for (int i = 0; i < 8; i++)        {            int random = UnityEngine.Random.Range(0, 100);            tree.Insert(random);            rands +=random + ",";        }        print("原始数列: " + rands);        tree.Preorder();        tree.Inorder();        tree.PostOrder();        tree.DeleteTree();//删除整个树        tree.Preorder();        tree.Inorder();        tree.PostOrder();    }}

输出结果

这里写图片描述

完,记得听我分享的音乐~