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

关于#算法#的问题:求 二叉树的查找节点算法 的 代码和流程图要求用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"。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 小孙同志在学习 2023-01-17 16:21
    关注

    希望有所帮助

    
    #include<stdio.h>
    
    #include<stdlib.h>
    
    
    
    typedef struct Node//二叉树的二叉链表存储表示;
    
    {
    
        char data;//节点数据域;
    
        struct Node*lchild;//左孩子指针;
    
        struct Node*rchild;//右孩子指针;
    
    } Node,*Tree;
    
    
    
    void CreateTree(Tree*T)
    
    //先序创建二叉树;
    
    {
    
        char ch;
    
        scanf("%c",&ch);//输入字符;
    
        if(ch=='#')
    
            (*T)=NULL;//递归结束,为空树;
    
        else
    
        {
    
            *T=(Tree)malloc(sizeof(Node));//创建二叉树空间;
    
            (*T)->data=ch;//根节点数据域置为ch;
    
            CreateTree(&(*T)->lchild);//递归创建左子树;
    
            CreateTree(&(*T)->rchild);//递归创建右子树;
    
    
    
        }
    
    }
    int NodeCount(Tree T)
    
    //统计二叉树的节点个数;
    
    {
    
        if(T==NULL) return 0;//如果是空树,节点个数为0;
    
        else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
    
        //节点个数=左子树节点+右子树节点+根节点;
    
    }
    int main( )
    
    {
    
        printf("创建一个带节点的二叉树链表: ");
    
        Tree T=NULL;//此时未创建二叉树;
    
        CreateTree(&T);//& 创立一颗二叉树;
    
        printf("二叉树的节点总数为:%d ",NodeCount(T));
    
    }
    

    评论 编辑记录
  • 流比 2023-01-17 16:12
    关注
    
    class Node
    {
        public int data;
        public Node left;
        public Node right;
        public Node(int data)
        {
            this.data = data;
            left = null;
            right = null;
        }
    }
    
    class BinaryTree
    {
        public Node root;
        public BinaryTree()
        {
            root = null;
        }
    
        public Node Search(Node root, int key)
        {
            if (root == null || root.data == key)
                return root;
            if (root.data > key)
                return Search(root.left, key);
            return Search(root.right, key);
        }
    }
    
    
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 C语言字符串不区分大小写字典排序相关问题
  • ¥15 关于#python#的问题:我希望通过逆向技术爬取1688搜索页下滑加载的数据
  • ¥15 学习C++过程中遇到的问题
  • ¥15 关于Linux的终端里,模拟实现一个带口令保护的屏保程序遇到的输入输出的问题!(语言-c语言)
  • ¥15 学习C++过程中遇到的问题
  • ¥15 请问,这个嵌入式Linux系统怎么分析,crc检验区域在哪
  • ¥15 二分类改为多分类问题
  • ¥15 Unity微信小游戏上调用ReadPixels()方法报错
  • ¥15 如何通过求后验分布求得样本中属于两种物种其中一种的概率?
  • ¥15 q从常量变成sin函数,怎么改写python代码?