博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杂七杂八——C#实现二叉树,外带中序遍历
阅读量:6627 次
发布时间:2019-06-25

本文共 1656 字,大约阅读时间需要 5 分钟。

发现用C#语法实现数据结构的时候,代码显得干净利落,嘻嘻。
 
  1. using System;
  2. namespace BinaryTree
  3. {
  4.     // Binary Tree的结点类
  5.     class Node
  6.     {
  7.         public int Data { getset; }
  8.         public Node LeftSubNode { getset; }
  9.         public Node RightSubNode { getset; }
  10.         // 结点为自己追加子结点(与向左/向右追加结合,形成递归)
  11.         public void Append(Node subNode)
  12.         {
  13.             if (subNode.Data <= this.Data)
  14.             {
  15.                 this.AppendLeft(subNode);
  16.             }
  17.             else
  18.             {
  19.                 this.AppendRight(subNode);
  20.             }
  21.         }
  22.         // 向左追加
  23.         public void AppendLeft(Node subNode)
  24.         {
  25.             if (this.LeftSubNode == null)
  26.             {
  27.                 this.LeftSubNode = subNode;
  28.             }
  29.             else
  30.             {
  31.                 this.LeftSubNode.Append(subNode);
  32.             }
  33.         }
  34.         // 向右追加
  35.         public void AppendRight(Node subNode)
  36.         {
  37.             if (this.RightSubNode == null)
  38.             {
  39.                 this.RightSubNode = subNode;
  40.             }
  41.             else
  42.             {
  43.                 this.RightSubNode.Append(subNode);
  44.             }
  45.         }
  46.         // 结点显示自己的数据
  47.         public void ShowData()
  48.         {
  49.             Console.WriteLine("Data={0}"this.Data);
  50.         }
  51.     }
  52.     // Binary Tree类
  53.     class Tree
  54.     {
  55.         // 根结点
  56.         public Node Root { getset; }
  57.         // 以某结点为起点,插入结点
  58.         public void Insert(Node newNode)
  59.         {
  60.             if (this.Root == null)
  61.             {
  62.                 this.Root = newNode;
  63.             }
  64.             else
  65.             {
  66.                 this.Root.Append(newNode);
  67.             }
  68.         }
  69.         // 重载,默认以根结点为起点插入
  70.         public void MidTravel()
  71.         {
  72.             this.MidTravel(this.Root);
  73.         }
  74.         
  75.         // 中序遍历(递归)
  76.         public void MidTravel(Node node)
  77.         {
  78.             if (node.LeftSubNode != null)
  79.             {
  80.                 this.MidTravel(node.LeftSubNode);
  81.             }
  82.             node.ShowData();
  83.             if (node.RightSubNode != null)
  84.             {
  85.                 this.MidTravel(node.RightSubNode);
  86.             }
  87.         }
  88.     }
  89.     class Program
  90.     {
  91.         static void Main(string[] args)
  92.         {
  93.             Tree tree = new Tree();
  94.             
  95.             tree.Insert(new Node { Data = 3 });
  96.             tree.Insert(new Node { Data = 6 });
  97.             tree.Insert(new Node { Data = 2 });
  98.             tree.Insert(new Node { Data = 7 });
  99.             tree.Insert(new Node { Data = 18 });
  100.             
  101.             tree.MidTravel();
  102.         }
  103.     }
  104. }
  105. // 水之真谛
  106. // [url]http://blog.csdn.net/FantasiaX[/url]
本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/95289,如需转载请自行联系原作者
你可能感兴趣的文章
Ruby 中 0/0.0 = NaN
查看>>
局域网访问Apache服务器
查看>>
JavaScript 闭包
查看>>
Spark算子:RDD行动Action操作(3)–aggregate、fold、lookup
查看>>
java获取当前时间前一周、前一月、前一年的时间
查看>>
话说WEB开发之页面重绘和回流
查看>>
using标识使用
查看>>
T264接口说明
查看>>
SELinux介绍
查看>>
visual C++ 用 TextOut 输出单个字符
查看>>
Rsyslog实现Nginx日志统一收集
查看>>
开源数字媒体资产管理系统:Razuna
查看>>
linux文本处理三剑客之grep家族及其相应的正则表达式使用详解
查看>>
Java中的IO操作(一)
查看>>
Python---装饰器
查看>>
s17data01
查看>>
java set and get 用法
查看>>
linux笔记1-1
查看>>
dubbo源码分析-负载均衡
查看>>
一统江湖的大前端(3) DOClever——你的postman有点low
查看>>