加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

算法系列15天速成 第十一天 树操作(上)

发布时间:2020-03-14 19:10:46 所属栏目:安全 来源:站长网
导读:我们可以对”线性结构“改造一下,变为”一个节点最多有一个前驱“和”多个后继“。哈哈,这就是我们今天说的”树“

while (head != tail)
            {
                var tempNode = treeList[head];

head = (head + 1) % Length;

//输出节点
                Console.Write(tempNode.data + "t");

//如果左子树不为空,则将左子树存于数组的tail位置
                if (tempNode.left != null)
                {
                    treeList[tail] = tempNode.left;

tail = (tail + 1) % Length;
                }

//如果右子树不为空,则将右子树存于数组的tail位置
                if (tempNode.right != null)
                {
                    treeList[tail] = tempNode.right;

tail = (tail + 1) % Length;
                }
            }
        }
        #endregion

<6> 清空二叉树

虽然C#里面有GC,但是我们能自己释放的就不麻烦GC了,同样清空二叉树节点,我们用到了递归,说实话,这次练习让我喜欢

上的递归,虽然XXX的情况下,递归的不是很好,但是递归还是很强大的。

复制代码 代码如下:


#region 清空二叉树
        /// <summary>
/// 清空二叉树
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
        public void BinTreeClear<T>(ChainTree<T> tree)
        {
            //递的结束点,归的起始点
            if (tree == null)
                return;

BinTreeClear(tree.left);
            BinTreeClear(tree.right);

//在归的过程中,释放当前节点的数据空间
            tree = null;
        }
        #endregion

最后上一下总的代码

复制代码 代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChainTree
{
    public class Program
    {
        static void Main(string[] args)
        {
            ChainTreeManager manager = new ChainTreeManager();

//插入节点操作
            ChainTree<string> tree = CreateRoot();

//插入节点数据
            AddNode(tree);

//先序遍历
            Console.WriteLine("n先序结果为: n");
            manager.BinTree_DLR(tree);

//中序遍历
            Console.WriteLine("n中序结果为: n");
            manager.BinTree_LDR(tree);

//后序遍历
            Console.WriteLine("n后序结果为: n");
            manager.BinTree_LRD(tree);

//层次遍历
            Console.WriteLine("n层次结果为: n");
            manager.Length = 100;
            manager.BinTree_Level(tree);

Console.WriteLine("n树的深度为:" + manager.BinTreeLen(tree) + "n");

Console.ReadLine();

}

#region 生成根节点
        /// <summary>
/// 生成根节点
/// </summary>
/// <returns></returns>
        static ChainTree<string> CreateRoot()
        {
            ChainTree<string> tree = new ChainTree<string>();

Console.WriteLine("请输入根节点,方便我们生成树n");

tree.data = Console.ReadLine();

Console.WriteLine("根节点生成已经生成n");

return tree;
        }
        #endregion

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读