C#——二叉树的实现(深度及广度遍历)

二叉树的实现

二叉树的结点包含data,left,right,通过一些结点之间的关系就可以构造二叉树;

二叉树结点类

    class Node<T>
    {
        T data;
        Node<T> left;
        Node<T> right;
        public Node(T value)
        {
            data = value;
            left = null;
            right = null;
        }
        public Node()
        {
            data = default(T);
            left = null;
            right = null;
        }
        public Node(T value,Node<T> lChild,Node<T> rChild)
        {
            data = value;
            left = lChild;
            right = rChild;
        }
        public T Data
        {
            get { return data; }
            set { data = value; }
        }
        public Node<T> Left
        {
            get { return left; }
            set { left = value; }
        }
        public Node<T> Right
        {
            get { return right; }
            set { right = value; }
        }
    }

二叉树类

    class LinkBinaryTree<T>
    {
        private Node<T> root;//根结点
        public Node<T> Root
        {
            get { return root; }
        }
        public LinkBinaryTree()
        {
            root = null;
        }
        public LinkBinaryTree(T value)
        {
            Node<T> p = new Node<T>(value);
            root = p;
        }
        //三种深度遍历
        //中序遍历
        public void  InOrder(Node<T> node)
        {
            if (root == null)
                return;
            if(node!=null)
            {               
                InOrder(node.Left);
                Console.Write(node.Data);     
                InOrder(node.Right);
            }
        }
        //先序遍历
        public void PreOrder(Node<T> node)
        {
            if (root == null)
                return;
            if (node != null)
            {
                Console.Write(node.Data);
                PreOrder(node.Left);
                PreOrder(node.Right);
            }        
        }
        //后序遍历
        public void PostOrder(Node<T> node)
        {
            if (root == null)
                return;
            if (node != null)
            {               
                PostOrder(node.Left);
                PostOrder(node.Right);
                Console.Write(node.Data);
            }
        }
         //-------广度遍历----------使用队列
        public void BFS(Node<T> root)
        {
            if (root == null)
                return;
            Queue<Node<T>> queue = new Queue<Node<T>>();
            queue.Enqueue(root);
            while (queue.Count>0)
            {
                Node<T> node = queue.Dequeue();
                Console.WriteLine(node.Data);
                if (node.Left != null)
                    queue.Enqueue(node.Left);
                if (node.Right != null)
                    queue.Enqueue(node.Right);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/noEnoughChief/article/details/82704872