RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 896957
Accepted
Johnny Rage
Johnny Rage
Asked:2020-10-24 00:43:02 +0000 UTC2020-10-24 00:43:02 +0000 UTC 2020-10-24 00:43:02 +0000 UTC

断点在 MonoDevelop 中不起作用

  • 772

问题的本质是这样的——C#中有一个类,它的方法需要调试。我在 MonoDevelop 7.5 (build 1255) 中设置了一个断点。当我开始调试时,程序运行并且不会在需要的地方减慢速度。这种情况下该怎么办?

PS断点是在LeftRotate方法上调用的

操作系统:Linux Mint 18.3 64 位

IDE:MonoDevelop 7.5

using System;

namespace RBTrees
{
    class MainClass
    {
        public enum BinSide
        {
            Left,
            Right
        }
        public enum Color
        {
            Black,
            Red
        }
        /// <summary>
        /// Бинарное дерево поиска
        /// </summary>
        public class BinaryTree
        {

            public long? Data { get; private set; }
            public BinaryTree Left { get; set; }
            public BinaryTree Right { get; set; }
            public BinaryTree Parent { get; set; }
            public Color T_Color { get; set; }
            public BinaryTree Root { get; set; } // указатель на корень дерева. Нужен для того, чтобы при поворотах не потерять корень дерева.

            /// <summary>
            /// Вставляет целочисленное значение в дерево
            /// </summary>
            /// <param name="data">Значение, которое добавится в дерево</param>
            public void Insert(long data)
            {
                if (Data == null || Data == data)
                {
                    Data = data;
                    T_Color = Color.Black;
                    return;
                }
                if (Data > data)
                {
                    if (Left == null) Left = new BinaryTree();
                    Insert(data, Left, this);
                    /*if (this.T_Color == Color.Black) Left.T_Color = Color.Red;
                    if (this.T_Color == Color.Red) Left.T_Color = Color.Black;*/

                }
                else
                {
                    if (Right == null) Right = new BinaryTree();
                    Insert(data, Right, this);
                    /*if (this.T_Color == Color.Black) Left.T_Color = Color.Red;
                    if (this.T_Color == Color.Red) Left.T_Color = Color.Black;*/
                }
            }

            /// <summary>
            /// Вставляет значение в определённый узел дерева
            /// </summary>
            /// <param name="data">Значение</param>
            /// <param name="node">Целевой узел для вставки</param>
            /// <param name="parent">Родительский узел</param>
            private void Insert(long data, BinaryTree node, BinaryTree parent)
            {

                if (node.Data == null || node.Data == data)
                {
                    node.Data = data;
                    node.Parent = parent;
                    if (parent.T_Color == Color.Black) node.T_Color = Color.Red;
                    if (parent.T_Color == Color.Red) node.T_Color = Color.Black;
                    return;
                }
                if (node.Data > data)
                {
                    if (node.Left == null) node.Left = new BinaryTree();
                    Insert(data, node.Left, node);
                    if (parent.T_Color == Color.Black) Left.T_Color = Color.Red;
                    if (parent.T_Color == Color.Red) Left.T_Color = Color.Black;

                }
                else
                {
                    if (node.Right == null) node.Right = new BinaryTree();
                    Insert(data, node.Right, node);
                    if (parent.T_Color == Color.Black) Right.T_Color = Color.Red;
                    if (parent.T_Color == Color.Red) Right.T_Color = Color.Black;
                }
            }
            /// <summary>
            /// Уставляет узел в определённый узел дерева
            /// </summary>
            /// <param name="data">Вставляемый узел</param>
            /// <param name="node">Целевой узел</param>
            /// <param name="parent">Родительский узел</param>
            private void Insert(BinaryTree data, BinaryTree node, BinaryTree parent)
            {

                if (node.Data == null || node.Data == data.Data)
                {
                    node.Data = data.Data;
                    node.Left = data.Left;
                    node.Right = data.Right;
                    node.Parent = parent;
                    return;
                }
                if (node.Data > data.Data)
                {
                    if (node.Left == null) node.Left = new BinaryTree();
                    Insert(data, node.Left, node);
                }
                else
                {
                    if (node.Right == null) node.Right = new BinaryTree();
                    Insert(data, node.Right, node);
                }
            }
            /// <summary>
            /// Определяет, в какой ветви для родительского лежит данный узел
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private BinSide? MeForParent(BinaryTree node)
            {
                if (node.Parent == null) return null;
                if (node.Parent.Left == node) return BinSide.Left;
                if (node.Parent.Right == node) return BinSide.Right;
                return null;
            }

            /// <summary>
            /// Удаляет узел из дерева
            /// </summary>
            /// <param name="node">Удаляемый узел</param>
            public void Remove(BinaryTree node)
            {
                if (node == null) return;
                var me = MeForParent(node);
                //Если у узла нет дочерних элементов, его можно смело удалять
                if (node.Left == null && node.Right == null)
                {
                    if (me == BinSide.Left)
                    {
                        node.Parent.Left = null;
                    }
                    else
                    {
                        node.Parent.Right = null;
                    }
                    return;
                }
                //Если нет левого дочернего, то правый дочерний становится на место удаляемого
                if (node.Left == null)
                {
                    if (me == BinSide.Left)
                    {
                        node.Parent.Left = node.Right;
                    }
                    else
                    {
                        node.Parent.Right = node.Right;
                    }

                    node.Right.Parent = node.Parent;
                    return;
                }
                //Если нет правого дочернего, то левый дочерний становится на место удаляемого
                if (node.Right == null)
                {
                    if (me == BinSide.Left)
                    {
                        node.Parent.Left = node.Left;
                    }
                    else
                    {
                        node.Parent.Right = node.Left;
                    }

                    node.Left.Parent = node.Parent;
                    return;
                }

                //Если присутствуют оба дочерних узла
                //то правый ставим на место удаляемого
                //а левый вставляем в правый

                if (me == BinSide.Left)
                {
                    node.Parent.Left = node.Right;
                }
                if (me == BinSide.Right)
                {
                    node.Parent.Right = node.Right;
                }
                if (me == null)
                {
                    var bufLeft = node.Left;
                    var bufRightLeft = node.Right.Left;
                    var bufRightRight = node.Right.Right;
                    node.Data = node.Right.Data;
                    node.Right = bufRightRight;
                    node.Left = bufRightLeft;
                    Insert(bufLeft, node, node);
                }
                else
                {
                    node.Right.Parent = node.Parent;
                    Insert(node.Left, node.Right, node.Right);
                }
            }
            /// <summary>
            /// Удаляет значение из дерева
            /// </summary>
            /// <param name="data">Удаляемое значение</param>
            public void Remove(long data)
            {
                var removeNode = Find(data);
                if (removeNode != null)
                {
                    Remove(removeNode);
                }
            }
            /// <summary>
            /// Ищет узел с заданным значением
            /// </summary>
            /// <param name="data">Значение для поиска</param>
            /// <returns></returns>
            public BinaryTree Find(long data)
            {
                if (Data == data) return this;
                if (Data > data)
                {
                    return Find(data, Left);
                }
                return Find(data, Right);
            }
            /// <summary>
            /// Ищет значение в определённом узле
            /// </summary>
            /// <param name="data">Значение для поиска</param>
            /// <param name="node">Узел для поиска</param>
            /// <returns></returns>
            public BinaryTree Find(long data, BinaryTree node)
            {
                if (node == null) return null;

                if (node.Data == data) return node;
                if (node.Data > data)
                {
                    return Find(data, node.Left);
                }
                return Find(data, node.Right);
            }

            /// <summary>
            /// Количество элементов в дереве
            /// </summary>
            /// <returns></returns>
            public long CountElements()
            {
                return CountElements(this);
            }
            /// <summary>
            /// Количество элементов в определённом узле
            /// </summary>
            /// <param name="node">Узел для подсчета</param>
            /// <returns></returns>
            private long CountElements(BinaryTree node)
            {
                long count = 1;
                if (node.Right != null)
                {
                    count += CountElements(node.Right);
                }
                if (node.Left != null)
                {
                    count += CountElements(node.Left);
                }
                return count;
            }
            public void RotateLeft(BinaryTree node, BinaryTree parent)
            {
                BinaryTree _a = new BinaryTree();
                BinaryTree _b_dLeft = new BinaryTree();
                BinaryTree _b = new BinaryTree();
                _b = node.Right;
                _b_dLeft = node.Right.Left;
                _a = node;
                node = _b;
                node.Left = _a;
                node.Left.Right = _b_dLeft;
                parent.Left = node;
            }
            private void RotateRight(BinaryTree node)
            {

            }
        }

        public class BinaryTreeExtensions
        {
            public static void Print(BinaryTree node)
            {
                if (node != null)
                {
                    if (node.Parent == null)
                    {
                        Console.Write("ROOT:{0}", node.Data);
                        if (node.T_Color == Color.Red) Console.WriteLine(" Red");
                        else Console.WriteLine(" Black");
                    }
                    else
                    {
                        if (node.Parent.Left == node)
                        {
                            Console.Write("Left for {1}  --> {0}", node.Data, node.Parent.Data);
                            if (node.T_Color == Color.Red) Console.WriteLine(" Red");
                            else Console.WriteLine(" Black");
                        }

                        if (node.Parent.Right == node)
                        {
                            Console.Write("Right for {1} --> {0}", node.Data, node.Parent.Data);
                            if (node.T_Color == Color.Red) Console.WriteLine(" Red");
                            else Console.WriteLine(" Black");
                        }
                    }
                    if (node.Left != null)
                    {
                        Print(node.Left);
                    }
                    if (node.Right != null)
                    {
                        Print(node.Right);
                    }
                }
            }
        }
        public static void Main(string[] args)
        {
            var tree = new BinaryTree();
            /*tree.Insert(20);
            tree.Insert(40);
            tree.Insert(10);
            tree.Insert(30);
            tree.Insert(80);
            tree.Insert(29);
            tree.Insert(31);
            tree.Insert(32);
            tree.Insert(70);*/
            tree.Insert(10);
            tree.Insert(20);
            tree.Insert(30);
            tree.RotateLeft(tree.Right, tree);
            tree.Insert(40);
            tree.Insert(50);
            tree.Insert(60);
            tree.Insert(70);

            BinaryTreeExtensions.Print(tree);
            /*tree.Remove(40);
            BinaryTreeExtensions.Print(tree);
            tree.Remove(20);
            BinaryTreeExtensions.Print(tree);*/
        }
    }
}
c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Johnny Rage
    2020-10-24T01:28:47Z2020-10-24T01:28:47Z

    到目前为止,问题已经通过在主区域设置标记解决了。奇怪的行为......或者我只是习惯了 Visual Studio 在特定方法上设置的点上放慢速度......

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5