• 算法题,不用递归,构造树型


    刚发了今天上午的面试题,最后一道算法题,我又看了一下,貌似真不太好实现,要在一个方法中构造整颗树,还不能使用递归.我先把自己的实现发上来,希望能起来抛砖引玉的作用.
    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);
            }

        }


    }

    小奎的石头已经扔出来了...
  • 相关阅读:
    第二个月课堂009python之总结(002)
    python的接口自动化测试+ddt数据驱动(*****)
    python题(002)
    selenium问题归纳一:多个句柄索引会乱的问题
    多测师讲解python讲解__xlwt__模块(拓展莫模块002)
    多测师python面试题__整理和答案(001)高级讲师肖sir
    第二个月课堂012讲解 _ Unittest框架(上)_高级讲师肖sir
    多测师讲解课堂11课__selenium__错归纳_高级讲师肖sir
    ActionChains定位元素
    css使用方法
  • 原文地址:https://www.cnblogs.com/bqrm/p/1204120.html
Copyright © 2020-2023  润新知