zoukankan      html  css  js  c++  java
  • 算法题,不用递归,构造树型

    刚发了今天上午的面试题,最后一道算法题,我又看了一下,貌似真不太好实现,要在一个方法中构造整颗树,还不能使用递归.我先把自己的实现发上来,希望能起来抛砖引玉的作用.
    8.算法题.
    表结构:
    ID        ParentID      Text
    1          NULL           Root
    2          1                 A1
    3           1                A2
    4           2                B
    5           4                C
    把以下程序补充完整.
    public class TreeNode{.........}
    public class Test
    {
        public TreeNode LoadTreeNodeFromDatabase(string connectionString){.......}
        /*********************
    输出结果如下:
    Root
    -A1
    --B
    ---C
    -A2
       **********************/
    public void Print(TreeNode nod){..........}

    }
    我的实现如下,
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Data.SqlClient;

    namespace ConsoleApplication2
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                Test t 
    = new Test();
                TreeNode tree 
    = t.LoadTreeNodeFromDatabase("server=.\\SQLExpress;uid=sa;pwd=sa;database=ksl");
                t.Print(tree);
                Console.Read();
            }

        }

        
    public class TreeNode
        
    {
            
    int _ID = 0;
            
    int _ParentID = 0;
            
    string _Text = "";
            List
    <TreeNode> nodes = new List<TreeNode>();

            
    public TreeNode()
            
    { }
            
    public TreeNode(int id, int parentid, string text)
            
    {
                _ID 
    = id;
                _ParentID 
    = parentid;
                _Text 
    = text;
            }

            
    public int ID
            
    {
                
    get return _ID; }
                
    set { _ID = value; }
            }

            
    public int ParentID
            
    {
                
    get return _ParentID; }
                
    set { _ParentID = value; }
            }

            
    public string Text
            
    {
                
    get return _Text; }
                
    set { _Text = value; }
            }

            
    public List<TreeNode> Nodes
            
    {
                
    get return nodes; }
            }

        }

        
    public class Test
        
    {
            
    public TreeNode LoadTreeNodeFromDatabase(string connectionString)
            
    {
                
    using (SqlConnection conn = new SqlConnection(connectionString))
                
    {
                    SqlCommand cmd 
    = new SqlCommand("SELECT ID,ParentID,Text FROM TblTree", conn);
                    conn.Open();
                    SqlDataReader reader 
    = cmd.ExecuteReader();
                    Dictionary
    <string, TreeNode> dict = new Dictionary<string, TreeNode>();
                    
    while (reader.Read())
                    
    {
                        
    int parentID = 0;
                        
    if (reader["ParentID"!= DBNull.Value)
                            parentID 
    = Convert.ToInt32(reader["ParentID"]);
                        TreeNode node 
    = new TreeNode(Convert.ToInt32(reader["ID"]), parentID, reader["Text"].ToString());
                        dict.Add(node.ID.ToString(), node);
                    }

                    reader.Close();
                    conn.Close();

                    TreeNode tree;
                    tree 
    = dict["1"];
                    
    foreach (string str in dict.Keys)
                    
    {
                        
    if (str == "1"continue;
                        TreeNode node 
    = dict[str];
                        TreeNode parentNode 
    = dict[node.ParentID.ToString()];
                        
    if (parentNode != null)
                            parentNode.Nodes.Add(node);
                    }

                    
    return tree;
                }

            }


            
    /***************************************************************
         
             Root
             -A1
             --B
             ---C
             -A2 
              **************************************************************
    */

            
    public void Print(TreeNode node)
            
    {
                
    if (node.ParentID != 0)
                
    {
                    
    for (int i = 0; i < node.ParentID; i++)
                    
    {
                        Console.Write(
    "-");
                    }

                }

                Console.WriteLine(node.Text);
                
    foreach (TreeNode treeNode in node.Nodes)
                    Print(treeNode);
            }

        }


    }

    小奎的石头已经扔出来了...
  • 相关阅读:
    JAVA数据库建表工具类
    HTML加CSS3太极图demo
    MD5加密(JAVA&JS)
    Base64工具类(JAVA&JS)
    JS模拟圆周运动
    JAVA读取写入excle表兼容版
    Math.PI和Math.sin() 与 Math.cos()搭配使用详解
    MySQL8.0数据库连接问题
    echarts饼状图案例
    JS前端使用MD5加密
  • 原文地址:https://www.cnblogs.com/bqrm/p/1204120.html
Copyright © 2011-2022 走看看