traversals for Binary Tree

学习后完成的,主要是学习了别人的思想和方法,但在输入结点方面加了些自己的优化。以后还会继续学习继续添加,不过都很基础,基础,基础。。。。不是为了解决问题也不是用来沟通交流的,算是一种督促自己学习的方式吧~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BinaryTree
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a Binary Tree
            Console.WriteLine("Please give a number how many nodes you want to create for the Binary_Tree: ");
            int length = int.Parse(Console.ReadLine());
            if (length == 0)
            { return; }
            Console.WriteLine("Please input the data: ");
            //array for the Node class
            Node<int>[] binTree = new Node<int>[length];
            for (int i = 0; i < length; i++)
            {
                binTree[i] = new Node<int>(int.Parse(Console.ReadLine()));

            }
           
            if (length == 1)
            {
                Binary_Tree<int> Tree = new Binary_Tree<int>(binTree[0]);
                Console.WriteLine("The PreOrder is:");
                Tree.PreOrder(binTree[0]);
                Console.WriteLine();
                Tree.InOrder(binTree[0]);
                Console.WriteLine();
                Tree.PostOrder(binTree[0]);
                Console.WriteLine();
            }
            else
            {
                int j;
                for (j = 0; j < (length - 2) / 2; j++)
                {

                    binTree[j].Lchild = binTree[2 * j + 1];

                    binTree[j].Rchild = binTree[2 * j + 2];

                }
                if (j == (length - 2) / 2 && length % 2 != 0)
                {
                    binTree[j].Lchild = binTree[2 * j + 1];

                    binTree[j].Rchild = binTree[2 * j + 2];
                }
                if (j == (length - 2) / 2 && length % 2 == 0)
                {
                    binTree[j].Lchild = binTree[2 * j + 1];

                }
                //instantiation
                Binary_Tree<int> Tree = new Binary_Tree<int>(binTree[0]);
                //methods calling
                Console.WriteLine("The PreOrder is:");
                Tree.PreOrder(binTree[0]);
                Console.WriteLine();
                Console.WriteLine("The InOrder is:");
                Tree.InOrder(binTree[0]);
                Console.WriteLine();
                Console.WriteLine("The PostOrder is:");
                Tree.PostOrder(binTree[0]);
                Console.WriteLine();
            }
        }
    }

}

public class Node<T>

    //field
    private T root;
    private Node<T> lchild;
    private Node<T> rchild;
    //property for the fields
    public T Root
    {
        get
        {
            return root;
        }
        set
        {
            root = value;
        }
    }
    public Node<T> Lchild
    {
        get
        {
            return lchild;
        }
        set
        {
            lchild = value;
        }
    }
    public Node<T> Rchild
    {
        get
        {
            return rchild;
        }
        set
        {
            rchild = value;
        }

    }
    //constructor for the class
    public Node(T val)
    {
        root = val;
        lchild = null;
        rchild = null;
    }
}
public class Binary_Tree<T>
{   
    //field
    private Node<T> head;
    //property
    public Node<T> Head
    {
        get
        {
            return head;
        }
        set
        {
            head = value;
        }
    }
    //constructor for the class
    public Binary_Tree(Node<T> P)
    {
        head = P;

    }
    //methods for traverses
    public void PreOrder(Node<T> P)
    {
        if (P != null)
        {
            Console.Write(P.Root+" ");
            PreOrder(P.Lchild);
            PreOrder(P.Rchild);
     
        }
        else
        {
            return;
        }
    }
    public void InOrder(Node<T> P)
    {
        if (P != null)
        {
       
            InOrder(P.Lchild);
            Console.Write(P.Root + " ");
            InOrder(P.Rchild);

        }
        else
        {
            return;
        }
    }
    public void PostOrder(Node<T> P)
    {
        if (P != null)
        {

           PostOrder(P.Lchild);
            PostOrder(P.Rchild);
            Console.Write(P.Root + " ");

        }
        else
        {
            return;
        }
    }
}

2009-12-28

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值