C#來完成二叉樹的搜尋、遍曆、及尋找

來源:互聯網
上載者:User

二叉樹結點類:
插入代碼的頁面打不開,所以直接這樣粘代碼了  :(

 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();

        }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.