m0_59844904 2023-01-17 15:57 采纳率: 33.3%
浏览 82
已结题

关于#算法#的问题:求 二叉树的查找节点算法 的 代码和流程图要求用c#语言编写

求 二叉树的查找节点算法 的 代码和流程图
要求用c#语言编写 希望能快速回答

  • 写回答

3条回答 默认 最新

  • 爱音斯坦牛 全栈领域优质创作者 2023-01-17 16:17
    关注

    代码和图如下,有帮助的话记得采纳哦!

    class Node
    {
        public int Value { get; set; }
        public Node Left { get; set; }
        public Node Right { get; set; }
    
        public Node(int value)
        {
            Value = value;
            Left = null;
            Right = null;
        }
    }
    
    class BinaryTree
    {
        public Node Root { get; set; }
    
        public Node Find(int value)
        {
            return Find(Root, value);
        }
    
        private Node Find(Node current, int value)
        {
            if (current == null)
            {
                return null;
            }
            if (current.Value == value)
            {
                return current;
            }
            var left = Find(current.Left, value);
            if (left != null)
            {
                return left;
            }
            return Find(current.Right, value);
        }
    }
    

    上面的代码定义了一个 Node 类和一个 BinaryTree 类。 Node 类包含一个整型值和左右子节点的引用。 BinaryTree 类包含一个根节点的引用。 Find 方法在二叉树中查找给定值,并返回包含该值的节点。如果找不到该值,则返回 null。
    图:

                       +-------------+
                       | Find(value) |
                       +------+-------+
                             |
                             v
                    +--------------+
                    | current == null|
                    +-------+--------+
                            |yes
                            |
                            v
                    +--------------+
                    |    return null|
                    +--------------+
                            |no
                            |
                            v
                    +--------------+
                    | current.Value |
                    |      == value |
                    +-------+--------+
                            |yes
                            |
                            v
                    +--------------+
                    |    return current|
                    +--------------+
                            |no
                            |
                            v
                   +-------------+
                   |  left =     |
                   | Find(current|
                   | .Left, value)|
                   +-------------+
                            |
                            v
                    +--------------+
                    |    left != null|
                    +-------+--------+
                            |yes
                            |
                            v
                    +--------------+
                    |    return left|
                    +--------------+
                            |no
                            |
                            v
                  +-------------+
                  |  return     |
                  | Find(current|
                  | .Right, value)|
                  +-------------+
    

    该流程图展示了在二叉树中查找特定值时,程序会从根节点开始遍历,依次比较当前节点的值和要查找的值。如果当前节点的值等于要查找的值,则返回该节点。如果当前节点的值不等于要查找的值,则继续在左子树或右子树中递归查找。如果遍历完整棵树都没有找到该值,则返回 null。
    这里给一个测试案例:

    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个二叉树
            var root = new Node(5);
            root.Left = new Node(3);
            root.Right = new Node(7);
            root.Left.Left = new Node(2);
            root.Left.Right = new Node(4);
            root.Right.Left = new Node(6);
            root.Right.Right = new Node(8);
    
            // 创建一个二叉树对象
            var tree = new BinaryTree();
            tree.Root = root;
    
            // 搜索特定值,这个给个8,我们查找试试
            var value = 8;
            var result = tree.Find(value);
            if (result != null)
            {
                Console.WriteLine("Found value: {0}", result.Value);
            }
            else
            {
                Console.WriteLine("Value not found: {0}", value);
            }
            Console.ReadLine();
        }
    }
    

    这棵二叉树的结构如下:

              5
            /   \
           3     7
          / \   / \
         2   4 6   8
    

    程序会在二叉树中查找值为 8 的节点。在这个例子中,程序会在树的最右边找到一个节点,值为 8,并在控制台输出 "Found value: 8"。

    如果你需要查找的值不存在于二叉树中,程序将在控制台输出 "Value not found: 8"。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月25日
  • 已采纳回答 1月17日
  • 创建了问题 1月17日

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?