首页 > 其他 > 详细

C#二叉树的先序遍历

时间:2014-02-25 11:44:46      阅读:343      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
1. 二叉树的先序遍历

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

namespace BinaryTree
{
    public interface IBinaryTree<T>
    {
        IBinaryTree<T> Left { get; }
        IBinaryTree<T> Right { get; }
        T Data { get; }
    }

    public static class BinaryTreeNodeCounter
    {
        public static int CountNodesRecursively<T>(this IBinaryTree<T> tree)
        {
            int BnCount = 0;

            if (tree == null)
                return 0;

            Console.Write("{0} ", tree.Data);
            BnCount++;

            BnCount = BnCount + CountNodesRecursively<T>(tree.Left);

            BnCount = BnCount +CountNodesRecursively<T>(tree.Right);

            return BnCount;
        }
    }

    class TreeNode<T> : IBinaryTree<T>
    {
        private T data;
        private TreeNode<T> left;
        private TreeNode<T> right;

        public TreeNode(T _data,TreeNode<T> _left,TreeNode<T> _right)
        {
            data = _data;
            left = _left;
            right = _right;
        }

        public IBinaryTree<T> Left 
        {
            get
            {
                 return left;
            }
        }

        public IBinaryTree<T> Right
        {
            get
            {
                return right;
            }
        }

        public T Data 
        {
            get
            {
                return data;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TreeNode<string> nodeF = new TreeNode<string>("F", null, null);
            TreeNode<string> nodeE = new TreeNode<string>("E", null, nodeF);
            TreeNode<string> nodeD = new TreeNode<string>("D", null, null);
            TreeNode<string> nodeC = new TreeNode<string>("C", null, null);
            TreeNode<string> nodeB = new TreeNode<string>("B", nodeD, nodeE);
            TreeNode<string> nodeA = new TreeNode<string>("A", nodeB, nodeC);

            int k = BinaryTreeNodeCounter.CountNodesRecursively<string>(nodeA);

            Console.WriteLine("\n{0}",k);

            Console.ReadLine();
        }
    }
}
bubuko.com,布布扣

输出:

bubuko.com,布布扣

 

2. 链表的冒泡排序

bubuko.com,布布扣
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Link
{
    public interface Link
    {
        int Data{get;set;}
        Link Next { get;set;}
    }

    public class LinkClass : Link
    {
        private int data;
        private Link next;

        public LinkClass(int _data,Link _next)
        {
            data = _data;
            next = _next;
        }

        public int Data
        {
            get
            {
                return data;
            }
            set 
            {
                data = value;
            }
        }

        public Link Next
        {
            get
            {
                return next;
            }
            set
            {
                next = value;
            }
        }
    }

    public class LinkSort
    {
        public static Link SortLink(Link head)
        {
            try
            {
                int linkLength = 0;
                Link p = head;

                if (p == null)
                    return null;

                while (p!=null)
                {
                    linkLength++;
                    p = p.Next;
                }

                p = head;

                for (int i = 0; i < linkLength; i++)
                {
                    p = head;

                    for (int j= 0; j < linkLength-i-1; j++)
                    {
                        if (p.Data > p.Next.Data)
                        {
                            int temp = p.Data;
                            p.Data = p.Next.Data;
                            p.Next.Data = temp;
                        }

                        p = p.Next;
                    }
                }

                Console.WriteLine("\n链表长度:{0}", linkLength);
            }
            catch
            {
               
            }

            return head;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            LinkClass lc1 = new LinkClass(20,null);
            LinkClass lc2 = new LinkClass(12, lc1);
            LinkClass lc3 = new LinkClass(2, lc2);
            LinkClass lc4 = new LinkClass(0, lc3);
            LinkClass lc5 = new LinkClass(96, lc4);
            LinkClass lc6 = new LinkClass(24, lc5);
            LinkClass lc7 = new LinkClass(13, lc6);
            LinkClass lc8 = new LinkClass(1, lc7);
            LinkClass lc9 = new LinkClass(65, lc8);
            LinkClass lc10 = new LinkClass(34, lc9);

            Link p = lc10;

            while (p != null)
            {
                Console.Write("{0} ", p.Data);
                p = p.Next;
            }

            LinkSort.SortLink(lc10);

            Console.Write("\n");

            Link q = lc10;
            while (q != null)
            {
                Console.Write("{0} ", q.Data);
                q = q.Next;
            }

            Console.ReadLine();
        }
    }
}
bubuko.com,布布扣

 

bubuko.com,布布扣

C#二叉树的先序遍历

原文:http://www.cnblogs.com/zzunstu/p/3564528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!