Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- public class BinaryTree
- {
- Node tree;
- public BinaryTree() { tree = null; }
- public void Solve(string s)
- {
- List<Node> tree = new List<Node>();
- SortedDictionary<char, int> cnt = new SortedDictionary<char, int>();
- for (int i = 0; i < s.Length; ++i)
- {
- if (cnt.ContainsKey(s[i]))
- cnt[s[i]]++;
- else
- cnt.Add(s[i], 1);
- }
- foreach (var v in cnt)
- {
- Node cur = new Node(v.Value, v.Key);
- tree.Add(cur);
- }
- while (tree.Count != 1)
- {
- tree.Sort((a, b) => a.inf.CompareTo(b.inf));
- Node l = tree[0];
- tree.RemoveAt(0);
- Node r = tree[0];
- tree.RemoveAt(0);
- Node parent = new Node(ref l, ref r);
- tree.Add(parent);
- }
- Node root = tree[0];
- Node.Print(ref root);
- Node.Build(ref root);
- List<int> path = new List<int>();
- Node.dfs(root, path);
- }
- public class Node
- {
- public int inf;
- public Node left;
- public Node right;
- char c;
- int code = -1;
- public static void dfs(Node root, List<int> path)
- {
- if (root.c != '~')
- {
- Console.Write($"{root.c} = ");
- foreach (var v in path)
- Console.Write(v);
- Console.WriteLine(root.code);
- }
- if (root.code != -1)
- path.Add(root.code);
- if (root.left != null)
- dfs(root.left, path);
- if (root.right != null)
- dfs(root.right, path);
- if (path.Count > 0)
- path.RemoveAt(path.Count - 1);
- }
- static public void Print(ref Node root, int depth = 0)
- {
- if (root == null)
- return;
- if (root.c != '~')
- {
- for (int i = 0; i < depth; i++)
- Console.Write(".");
- Console.WriteLine(root.c);
- }
- else depth++;
- Print(ref root.left, depth);
- Print(ref root.right, depth);
- }
- public Node(int nodeInf, char nodeChar)
- {
- inf = nodeInf;
- c = nodeChar;
- left = null;
- right = null;
- }
- public Node() { left = right = null; }
- public Node(ref Node L, ref Node R)
- {
- left = L;
- right = R;
- inf = L.inf + R.inf;
- c = '~';
- }
- public static void Build(ref Node root)
- {
- if (root.left != null)
- {
- root.left.code = 0;
- Build(ref root.left);
- }
- if (root.right != null)
- {
- root.right.code = 1;
- Build(ref root.right);
- }
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- string s = $"Общее решение однородного уравнения выписано верно " +
- $"Разбейте, пожалуйста, задания по номерам, сейчас наблюдаю некое несоответствие." +
- $"Зачем во втором задании(решение однородного уравнения с некоторыми начальными условиями) построена такая система? Какие начальные условия были выбраны? Или это уже следующее задание(для следующего там не хвататет производных у С_i) ?" +
- $"Была ли выполнена проверка(подcтановкой) для решения, которое было получено операторным методом? Штрих около h(t) в итоговом решении - производная ? Пожалуйста, проверьте.";
- BinaryTree tree = new BinaryTree();
- tree.Solve(s);
- }
- }
Add Comment
Please, Sign In to add comment