首页 > 学院 > 开发设计 > 正文

二叉树(简单版)

2019-11-17 02:34:11
字体:
来源:转载
供稿:网友

二叉树(简单版)

树是一种非线性结构,树的本质是将一些节点由边连接起来,形成层级的结构,即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;        }           }}运行结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表