二叉树(简单版)

 树是一种非线性结构,树的本质是将一些节点由边连接起来,形成层级的结构,即1:N的关系,下面是手动构建数据之间的关系:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tree3
{
    //手动构建节点之间的关系
    public class Program
    {
        static void Main(string[] args)
        {

            Node<string> rootNode =BinTree();

            Console.WriteLine("先序遍历方法遍历二叉树: ");
            PreOrde(rootNode);

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("中序遍历方法遍历二叉树:");
            InOrde(rootNode);

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("后序遍历方法遍历二叉树:");
            AfterOrde(rootNode);
            Console.ReadKey();
        }
        /// <summary>
        /// 构建二叉树
        /// </summary>
        /// <returns></returns>
        public static Node<string> BinTree()
        {
            Node<string>[] binTree = new Node<string>[11];
            //创建节点
            binTree[0] = new Node<string>("A");
            binTree[1] = new Node<string>("B");
            binTree[2] = new Node<string>("C");
            binTree[3] = new Node<string>("D");
            binTree[4] = new Node<string>("E");
            binTree[5] = new Node<string>("F");
            binTree[6] = new Node<string>("G");
            binTree[7] = new Node<string>("H");
            binTree[8] = new Node<string>("J");
            binTree[9] = new Node<string>("K");
            binTree[10] = new Node<string>("L");

            //构建关系
            binTree[0].LNode = binTree[1];
            binTree[0].RNode = binTree[2];
            binTree[1].LNode = binTree[3];
            binTree[1].RNode = binTree[4];
            binTree[2].LNode = binTree[6];
            binTree[2].RNode = binTree[7];
            binTree[6].RNode = binTree[8];
            binTree[7].RNode = binTree[9];
            binTree[8].RNode = binTree[10];

            //返回跟节点
            return binTree[0];
        }

        /// <summary>
        /// 先序遍历(先访问跟节点->在访问左孩子->在访问右孩子)递归
        /// 注意的是:遍历左右子树时仍然采用中序遍历方法。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rootNode"></param>
        public static void PreOrde<T>(Node<T> rootNode)
        {
            if (rootNode != null)
            {
                Console.Write(string.Format("{0} ", rootNode.Data));
                PreOrde(rootNode.LNode);
                PreOrde(rootNode.RNode);
            }
        }
        /// <summary>
        /// 中序遍历(先访问左节点->在访问跟节点->在访问右孩子)递归
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rootNode"></param>
        public static void InOrde<T>(Node<T> rootNode)
        {
            if (rootNode != null)
            {
                InOrde(rootNode.LNode);
                Console.Write(string.Format("{0} ", rootNode.Data));
                InOrde(rootNode.RNode);
            }
        }
        /// <summary>
        /// 后序遍历(先访问左节点->在访问右节点->在访问跟孩子)递归
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rootNode"></param>
        public static void AfterOrde<T>(Node<T> rootNode)
        {
            if (rootNode != null)
            {
                AfterOrde(rootNode.LNode);
                AfterOrde(rootNode.RNode);
                Console.Write(string.Format("{0} ", rootNode.Data));
            }
        }
    }
    //节点类
    public class Node<T>
    {

        private T data;
        /// <summary>
        /// 数据
        /// </summary>
        public T Data
        {
            get { return data; }
            set { data = value; }
        }

        private Node<T> lnode;
        /// <summary>
        /// 左孩子
        /// </summary>
        public Node<T> LNode
        {
            get { return lnode; }
            set { lnode = value; }
        }

        private Node<T> rnode;
        /// <summary>
        /// 右孩子
        /// </summary>
        public Node<T> RNode {
            get { return rnode; }
            set { rnode = value; }
             }

        /// <summary>
        /// 无参构造函数
        /// </summary>
        public  Node()
        {

        }
        /// <summary>
        /// 节点构造函数
        /// </summary>
        /// <param name="data"></param>
        public  Node(T data)
        {
            this.data = data;
        }

    }
}

运行结果:

				
时间: 2024-12-20 17:52:43

二叉树(简单版)的相关文章

C语言实现二叉树-02版

---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那得消耗很多内存哈!: 我大吃一惊,那么项目经理果然不是吃素的,他是在提醒我别投机取巧啦: 我们都知道递归实现树是比较简单的一种方式: 的确它的性能比较差,试想每次递归都要把当前函数压栈,然后出栈.. 好啦,那咱们今天就用非递归实现它:反正今天我就不干别的啦: Problem 下面的代码你应该比较熟习

分享一个近期写的简单版的网页采集器

分享一个近期写的简单版的网页采集器 功能特点: 1.可通过配置,保存采集规则. 2.可通过采集规则,进行数据采集. 3.可分页,分关键字,进行采集. 4.可保存数据至数据库,文本中. ........... 功能还比较简单,喜欢深入的可以继续深入下去,暂时还没有登录的功能,因为登录功能涉及到的范围比较广,待日后慢慢研究后再开发. 我先上个图让大家一睹为快吧: 首先看看页面,我们要采集这个网站的文章 接下来,首先是查找分页,获得分页里面的文章链接,接着查找内容页需要采集的字段,生成规则,进行采集.

Java实现简单版SVM

最近的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,因为没有用到拉格朗日,对偶,核函数等等.而是用最简单的梯度下降法求解.其中的数学原理我参考了http://blog.csdn.net/lifeitengup/article/details/10951655,文中是用matlab实现的svm. 源代码和数据集下载:https://github.com/linger2012/simpleSvm 其中数据集来自于libsvm,我找了其中

MFC抓取网页代码简单版。

最近又在网上找了一些有关MFC抓取网页代码的文章看,发现有个比较简单的代码,和大家分享下. CInternetSession session(NULL, 0); CHttpFile* htmlFile = NULL; CString strLine, strHtml; CString url = _T("http://www.tqyb.com.cn/data/gzWeather/gz_weatherForecastInDays.js?"); TCHAR sRecv[1024]; UIN

luogu P3808 【模板】AC自动机(简单版)

二次联通门 : luogu P3808 [模板]AC自动机(简单版) /* luogu P3808 [模板]AC自动机(简单版) 手速越来越快了 10分钟一个AC自动机 一遍过编译 + 一边AC 感觉不错 我也就做做板子题了.. */ #include <iostream> #include <cstring> #include <cstdio> #include <queue> #define Max 1000009 void read (int &

简单版猜拳游戏

界面很简单 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

汇编 输入输出字符串(最简单版)

data segment max_len db 10 real_len db ? buf_str db 10 dup(0) CRLF DB 0AH,0DH,"$"; data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax xor ax,ax mov dx,offset max_len;输入 mov ah,10 int 21h mov bx,offset buf_str;去掉输入的最后一个回车字

JavaMail简单版实验测试

前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入相关jar包 客户端传输邮件需要用的jar包:activation.jar和mail.jar (下载:https://github.com/SeaSky0606/share) 2.JavaMail代码实现 1 package com.seasky.mail; 2 3 import java.util

SqlHelper 简单版

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace AddressBook { class SqlHelper { /// <summary> /// 连接数据库的字符串 /// </summary> private static string co

qtday03 简单版的贪吃蛇游戏

//snakegame.h #ifndef SNAKEGAME_H #define SNAKEGAME_H #include<QList> #include<QtWidgets/QLabel> #include<QtWidgets/QDialog> #include<QKeyEvent> #include<QTimer> /*枚举,表示方向*/ enum Direction{D_UP,D_DOWN,D_LEFT,D_RIGHT}; class S