办理权证期货最低佣金
强烈推荐③只暴涨牛股
内幕机构拉升③只黑马
今日:十大飙涨牛股√
今日公开100%涨停牛股
推荐明日③只涨停黑马
③只涨停黑马点击验证
[核心内参]投资8金股
股评家推荐狂涨黑马股
专家推荐③只暴涨牛股
今日→推荐②只涨停股
建议:增持的6大黑马
游资重点抄底的牛股√
教你走出被套牢的股票
天天公开③只飙涨金股
专家推荐③只飙涨牛股
发新话题
打印

[05-30] 算法题,不用递归,构造树型

今日头条:北京马哥炒股票3个月3000元炒成25万!!!

                         

[05-30] 算法题,不用递归,构造树型

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

    }


}


小奎的石头已经扔出来了...
抢钱,抢粮,抢地盘!
发新话题