zoukankan      html  css  js  c++  java
  • C#来完成二叉树的搜索、遍历、及查找

    二叉树结点类:
    插入代码的页面打不开,所以直接这样粘代码了  :(

     public class Node
        {
            private Node left;
            private Node right;
            private int value;

            public Node(Node left, Node right, int value)
            {
                this.left = left;
                this.right = right;
                this.value = value;
            }

            public Node(int value)
            {
                this.value = value;
            }

            public Node getLeftNode() { return left; }
            public Node getRightNode() { return right; }
            public int getValue() { return value; }


            /// <summary>
            /// 查找某一节点
            /// </summary>
            /// <param name="node">根节点</param>
            /// <param name="value">要查找的值</param>
            /// <returns></returns>
            public Node findNode(Node root, int value)
            {
                if (root == null)
                {
                    return null;
                }

                if (root.getValue() == value)
                {
                    return root;
                }

                if (value < root.getValue())
                {
                    findNode(root.getLeftNode(), value);
                }
                else
                {
                    findNode(root.getRightNode(), value);
                }
                return null;
            }

            /// <summary>
            /// 先根遍历
            /// </summary>
            /// <param name="root"></param>
            public static void PreOrder(Node root)
            {
                if (root != null)
                {
                    Console.WriteLine(root.getValue());

                    PreOrder(root.getLeftNode());
                    PreOrder(root.getRightNode());
                }
            }

            /// <summary>
            /// 后根遍历
            /// </summary>
            /// <param name="root"></param>
            public static void AfterOrder(Node root)
            {
                if (root != null)
                {
                    AfterOrder(root.getLeftNode());
                    AfterOrder(root.getRightNode());
                    Console.WriteLine(root.getValue());
                }
            }

            /// <summary>
            /// 中序遍历二叉树
            /// </summary>
            /// <param name="root"></param>
            public static void MidOrder(Node root)
            {
                if (root != null)
                {
                    MidOrder(root.getLeftNode());
                    Console.WriteLine(root.getValue());
                    MidOrder(root.getRightNode());
                }
            }

            public static int leafNodeCount = 0;
            public static void count_leafNode(Node root)
            {
                if (root == null)
                {
                    return;
                }
                if (root.getLeftNode() == null && root.getRightNode() == null)
                {
                    Console.WriteLine("叶子节点" +  leafNodeCount.ToString() + "的值为:" +   root.getValue());
                    leafNodeCount++;
                }
                else
                {
                    count_leafNode(root.getLeftNode());
                    count_leafNode(root.getRightNode());
                }
            }
        }


    为了简便起见,将遍历等相关方法都写在了该节点中。
    以下是主程序调用:

     public void showMain()
            {
    //构建二叉树
                Node[] node=new Node[8];
                node[4] = new Node(5);
                node[5] = new Node(6);
                node[6] = new Node(7);

                node[3] = new Node(node[6], node[7], 3);
                node[2] = new Node(node[4], node[5], 2);
                node[1] = new Node(node[3], null, 2);
                node[0] = new Node(node[1], node[2], 0);

                Console.WriteLine("后根遍历:");
                Node.AfterOrder(node[0]);

                Console.WriteLine("先根遍历:");
                Node.PreOrder(node[0]);

                Console.WriteLine("中根遍历:");
                Node.MidOrder(node[0]);

                Console.WriteLine("共有叶子节点个数为:");
                Node.count_leafNode(node[0]);
                Console.WriteLine(Node.leafNodeCount);

                Console.Read();

            }

    点个广告:
  • 相关阅读:
    最近,我和隐私计算干上了。
    面试官疯了吗,问我为什么浮点数不精确?
    全网连夜修复的Log4j漏洞,如何做到一行代码都不改?
    Log4j未平,Logback 又起!再爆漏洞?
    聊聊云原生和微服务架构
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏01游戏窗口
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏03全屏显示游戏窗口
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
    手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理
    python及pygame雷霆战机游戏项目实战01 控制飞机
  • 原文地址:https://www.cnblogs.com/hanxianlong/p/1204547.html
Copyright © 2011-2022 走看看