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】
  • 相关阅读:
    [C++]猜词游戏简版
    [C++]异常处理实例-基础版
    C++Primer Plus习题记录-Chapter12
    C++Primer Plus习题记录-Chapter11
    [C++]MI(多继承)实例-基础版
    Windows下编译libevent及使用
    jquery点击回到顶部
    简体繁体转换
    检测ip和地区
    点击复制到剪切板
  • 原文地址:https://www.cnblogs.com/4kapple/p/1219397.html
Copyright © 2011-2022 走看看