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], null2);
                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();

            }

    【转载;来源:http://www.cnblogs.com/hanxianlong】
  • 相关阅读:
    递归算法
    linux下如何使用split
    什么是OPTEE-OS
    ubuntu 18.04 64bit如何编译安装内核
    ubuntu 18.04 64bit没有声音如何解决
    如何解决ubuntu报的错误:You must put some 'source' URIs in your sources.list
    linux下如何安装解压工具rar
    如何将一个已有的仓库推送到一个空的新仓库中
    ubuntu 18.04 64bit下如何安装python开发工具jupyter
    ubuntu 18.04 64bit下如何安装python开发工具jupyterhub
  • 原文地址:https://www.cnblogs.com/4kapple/p/1219397.html
Copyright © 2011-2022 走看看