简单二叉树实现
来源:互联网 发布:怎么修复微信数据库 编辑:程序博客网 时间: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(); }}
输出结果
完,记得听我分享的音乐~
阅读全文
1 0
- 简单二叉树实现
- 简单实现二叉树
- 简单二叉树实现
- 二叉树简单实现
- 简单二叉树的实现
- 二叉树的简单实现
- 二叉树 简单实现 问题解决
- 简单二叉树的实现
- 二叉树的简单实现
- Java实现简单二叉树
- 二叉树的简单实现
- 二叉树的简单实现
- C++实现简单二叉树
- 二叉树的简单实现
- 二叉查找树简单实现
- 【c++】简单实现二叉树
- 二叉树-排序二叉树的简单实现
- 二叉树的二叉链表存储简单实现
- 用vc2013编写的程序在新电脑上运行出现“0xc000007b”错误的解决办法
- Python学习之列表的内部实现详解
- h5 34
- 基于React Native的移动平台研发实践分享
- 项目实战:微交互之转场动画(anim、style、theme)
- 简单二叉树实现
- linux 连接手机失败
- ubuntu 使用xrandr 双屏显示
- JDBC preparedstatement和statement的区别
- Android-25种开源炫酷动画框架
- SDN
- 如何判断一个字符串是否经过base64加密过
- spring aop使用
- PHP file_get_contents