C# 熟悉C#语法和VS编程环境

实验一:熟悉C#语法和VS编程环境

实验目的

用C#构造一棵二叉树,并从根开始,按层的顺序,从右到左,从上到下,依次进行访问。


环境

  1. 操作系统: Windows 10 X64
  2. 工具: visual studio 2017
  3. 语言:C#

二叉树的结点存储结构

class tree
{
    public string data;
    public tree lchild;
    public tree rchild;
}

先序构造二叉树

思路:

按先序次序输入二叉树中的结点的值(一行字符),”#“表示空树。
采用递归方式。

代码:
class list
{
    public tree root;
   
    public bool CreateBiTree(tree rt)//构造二叉树
    {
        string st;
        st = Console.ReadLine();
        if (st == "#")
        {
        //    rt = null;
            return false;
        }
        else
        {

            if (root==null)
            {
                rt = new tree();//分配一个实例对象的空间,将空间的地址赋给该变量
                root = rt;
            }
            rt.data = st;

            rt.lchild = new tree();
            if (!CreateBiTree(rt.lchild))
                rt.lchild = null;


            rt.rchild = new tree();
            if (!CreateBiTree(rt.rchild))
                rt.rchild = null;
        }
        return true;
    }
}

层级遍历

思路 :

1.创建一个队列(利用队列先进后出的性质),并将根结点加入队列中。
2.当队列头元素的左孩子不为空时,把左结点加入队列中;当队列头元素的右孩子不为空时,把右结点加入队列中。
3.移除头元素。
4.重复操作直至队列为空。

代码:
	public bool LevelOrderTraverse()//按层遍历
    {
        MyDeClass myDe = new MyDeClass();
        mydelegate p = new mydelegate(myDe.Print);//委托

        Queue<tree> q = new Queue<tree>();
        if(root==null)
        {
            Console.WriteLine("false");
            return false;
        }
        q.Enqueue(root);


        while (q.Count>0)
        {


            tree temp = q.Dequeue();

            if (temp.rchild != null)
            {
                q.Enqueue(temp.rchild);
            }



            if (temp.lchild != null)
            {
                q.Enqueue(temp.lchild);
            }


            

            p(temp);
        }
        return true;

    }

运行测试

输入 :


输出:


重点知识

1.委托

在层级遍历中用到了委托,类似于c,c++的函数指针。关于委托的知识可以参考
菜鸟教程——委托

2.队列

在层级遍历中还用到了C#的Queue类。关于Queue类的内容可以参考 菜鸟教程——C#队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值