winfrom treeview 节点

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图

public class neth()
{
DataResultSet rs = new DataResultSet();
            string sql = "";
            ModPub.gDataOper.GetRs(sql, ref rs);
DataTable dt = new DataTable();
            DataColumn dc1 = new DataColumn("LISTNAME", typeof(string));
            dt.Columns.Add(dc1);
            for (int i = 0; i < rs.RowCount; i++)
            {
                DataRow dtRow = dt.NewRow();
                dtRow["LISTNAME"] = rs[i, "LISTNAME"].ToString();
                dt.Rows.Add(dtRow);
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                fjd = rs[i, "LISTNAME"].ToString();
                TreeNode tree = new TreeNode();
                tree.Name = dt.Rows[i]["LISTNAME"].ToString();
                tree.Text = dt.Rows[i]["LISTNAME"].ToString();
                childtree(tree);
                treeView1.Nodes.Add(tree);
            }

            List<string> nodeList = new List<string>();
            foreach (TreeNode tree in treeView1.Nodes)
            {
                if (nodeList.Contains(tree.Text))
                {
                    treeView1.Nodes.Remove(tree);
                }
                else
                {
                    nodeList.Add(tree.Text);
                }
            }
            //现在就是List集合中有两条往上一模一样的数据,用tree来传值,第一次正常添加到treeview中,第二次因为已经有一样的数据所以不添加,再执行第三次或者更多的话tree就会传null,然后就无法走下去,并且还会添加到treeview中
        }

        public void childtree(TreeNode node)
        {
            DataResultSet rs = new DataResultSet();
            string sql = $"";
            ModPub.gDataOper.GetRs(sql, ref rs);
            for (int i = 0; i < rs.RowCount; i++)
            {
                TreeNode treeNode = new TreeNode();
                treeNode.Name = rs[i, "UPID"].ToString();
                treeNode.Text = rs[i, "UPID"].ToString();
                node.Nodes.Add(treeNode);
            }
        }
运行结果及报错内容

数据就好比如陕西,西安;陕西,咸阳;陕西,渭南;三条数据,foreach里tree传的是陕西,第一次循环判断正常添加treeview中,第二次因为已经有陕西所以不添加陕西,会把咸阳传到子节点,第三次或者多次tree传的null,在if条件会报错对象未实例化,然后结束程序,再次启动程序会再次添加一个陕西的节点,并且两个陕西的节点都会有3个子节点

你为什么判断如果里面已经有了就删掉
有了就不用管了呀,没有就添加
这种应用按理说应该写个递归的,你这样写死了那数据就只能是2层