.NET 4.x Бинарное дерево. Добавить вывод вершин и нумерацию - C#

Узнай цену своей работы

Формулировка задачи:

Вообщем есть такая программа. Сюда нужно добавить методы, которые выводят на екран все вершины дерева(по 1 разу),и метод который нумерует его вершины в соответствии с порядком прямого обхода этого дерева. Буду очень благодарен людям, которые мне помогут
using System;
using System.Collections.Generic;
namespace BST
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Tree bst = new Tree(new List<int> { 5, 1, 7, 10, 13, 17 });
                bst.Add(6);
                bst.Add(8);
                bst.Add(2);
                Console.WriteLine("Way between {0}, {1}, {2}", 10, 17, bst.WayExists(10, 17));
                Console.WriteLine("Way between {0}, {1}, {2}", 5, 2, bst.WayExists(5, 2));
                Console.WriteLine("Way between {0}, {1}, {2}", 2, 5, bst.WayExists(2, 5));
                Console.WriteLine(bst.CLRDetailed());
                List<int> values = bst.LCR();
                foreach (int element in values) Console.Write(element + " ");
                Console.WriteLine("Minimal value: {0}", bst.GetMin());
                bst.DelNode(1);
                Console.WriteLine(bst.CLRDetailed());
                Console.WriteLine("Minimal value: {0}", bst.GetMin());
                Console.ReadKey();
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                Console.ReadKey();
            }
        }
    }
    public class Tree
    {
        private List<int> listRes = new List<int>();
        private string stringRes = string.Empty;
        private TreeNode root;
        public class TreeNode
        {
            public int value;
            public TreeNode left = null;
            public TreeNode right = null;
            public TreeNode(int value)
            {
                this.value = value;
            }
        }
        public Tree()
        { }
        public Tree(List<int> list) : this()
        {
            foreach (int element in list) Add(element);
        }
        public void Add(int value)
        {
            AddRecursion(ref root, value);
        }
        public int GetMin()
        {
            int min = int.MaxValue;
            List<int> nodeValues = new List<int>(CLR());
            foreach (int element in nodeValues) if (element < min) min = element;
            return min;
        }
        public void DelNode(int value)
        {
            DelNode(ref root, value);
        }
        public List<int> CLR()
        {
            listRes.Clear();
            return CLR(root);
        }
        public List<int> LCR()
        {
            listRes.Clear();
            return LCR(root);
        }
        public List<int> RCL()
        {
            listRes.Clear();
            return RCL(root);
        }
        public string CLRDetailed()
        {
            stringRes = string.Empty;
            return CLRDetailed(root);
        }
        public string LCRDetailed()
        {
            listRes.Clear();
            return LCRDetailed(root);
        }
        public string RCLDetailed()
        {
            listRes.Clear();
            return RCLDetailed(root);
        }
        public List<int> BFS()
        {
            listRes.Clear();
            return BFS(root);
        }
        public bool WayExists(int start, int goal)
        {
            return Search(Search(start), goal) != null;
        }
        public TreeNode Search(int value)
        {
            return Search(root, value);
        }
        private void AddRecursion(ref TreeNode node, int value)
        {
            if (node == null) node = new TreeNode(value);
            else
            {
                if (value < node.value) AddRecursion(ref node.left, value);
                else if (value > node.value) AddRecursion(ref node.right, value);
            }
        }
        private List<int> CLR(TreeNode node)
        {
            if (node != null)
            {
                listRes.Add(node.value);
                CLR(node.left);
                CLR(node.right);
            }
            return listRes;
        }
        private List<int> LCR(TreeNode node)
        {
            if (node != null)
            {
                LCR(node.left);
                listRes.Add(node.value);
                LCR(node.right);
            }
            return listRes;
        }
        private List<int> RCL(TreeNode node)
        {
            if (node != null)
            {
                RCL(node.right);
                listRes.Add(node.value);
                RCL(node.left);
            }
            return listRes;
        }
        private string CLRDetailed(TreeNode node)
        {
            if (node != null)
            {
                stringRes += "Отримали значення:" + node.value.ToString() + Environment.NewLine;
                stringRes += "Обходження лiвого пiддерева:" + Environment.NewLine;
                CLRDetailed(node.left);
                stringRes += "Обходження правого пiддерева:" + Environment.NewLine;
                CLRDetailed(node.right);
            }
            else stringRes += "Значення вiдсутнє - NULL" + Environment.NewLine;
            return stringRes;
        }
        private string LCRDetailed(TreeNode node)
        {
            if (node != null)
            {
                stringRes += "Обходження лiвого пiддерева:" + Environment.NewLine;
                LCRDetailed(node.left);
                stringRes += "Отримали значення:" + node.value.ToString() + Environment.NewLine;
                stringRes += "Обходження правого пiддерева:" + Environment.NewLine;
                LCRDetailed(node.right);
            }
            else stringRes += "Значення вiдсутнє - NULL" + Environment.NewLine;
            return stringRes;
        }
        private string RCLDetailed(TreeNode node)
        {
            if (node != null)
            {
                stringRes += "Обходження правого пiддерева:" + Environment.NewLine;
                RCLDetailed(node.right);
                stringRes += "Отримали значення:" + node.value.ToString() + Environment.NewLine;
                stringRes += "Обходження лівого пiддерева:" + Environment.NewLine;
                RCLDetailed(node.right);
            }
            else stringRes += "Значення вiдсутнє - NULL" + Environment.NewLine;
            return stringRes;
        }
        private List<int> BFS(TreeNode node)
        {
            var queue = new Queue<TreeNode>();
            listRes.Add(node.value);
            queue.Enqueue(node);
            while (queue.Count != 0)
            {
                if (queue.Peek().left != null)
                {
                    listRes.Add(queue.Peek().left.value);
                    queue.Enqueue(queue.Peek().left);
                }
                if (queue.Peek().right != null)
                {
                    listRes.Add(queue.Peek().right.value);
                    queue.Enqueue(queue.Peek().right);
                }
                listRes.Add(queue.Peek().value);
                queue.Dequeue();
            }
            return listRes;
        }
 
        private TreeNode Search(TreeNode node, int value)
        {
            if (node != null)
            {
                if (value == node.value) return node;
                else if (value < node.value) return Search(node.left, value);
                else return Search(node.right, value);
            }
            else return node;
        }
        private void DelNode(ref TreeNode node, int value)
        {
            if (node != null)
            {
                if (node.value < value) DelNode(ref node.right, value);
                else if (node.value > value) DelNode(ref node.left, value);
                else if (node.left == null && node.right == null) node = null;
                else if (node.left == null) node = node.right;
                else if (node.right == null) node = node.left;
                else node = node.left;
            }
        }
    }
}

Решение задачи: «.NET 4.x Бинарное дерево. Добавить вывод вершин и нумерацию»

textual
Листинг программы
protected static string ShowTree(Node<T> root) {
            if (root == null) {
                throw new Exception("ПУСТО В ОГОРОДЕ НЕ ГУСТО");
            }
            if (root.Left == null && root.Right == null) {
 
                return root.Value.ToString();
            }
            if (root.Left != null && root.Right == null) {
                return root.Value + "(" + ShowTree(root.Left) + ",_)";
            }
            if (root.Left == null && root.Right != null) {
                return root.Value + "(_," + ShowTree(root.Right) + ")";
            }
            return root.Value + "(" + ShowTree(root.Left) + ", " + ShowTree(root.Right) + ")";
        }
 
 
public static string ST(BinaryTree<T> s){
            return ShowTree(s.root);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы