递归方式实现树的展示形式

1.模拟出数据

 1 private DataTable CreateDataTable()
 2         {
 3             DataTable table = new DataTable();
 4             DataColumn column1 = new DataColumn("Id", typeof(string));
 5             DataColumn column2 = new DataColumn("Text", typeof(String));
 6             DataColumn column3 = new DataColumn("ParentId", typeof(string));
 7             table.Columns.Add(column1);
 8             table.Columns.Add(column2);
 9             table.Columns.Add(column3);
10
11             DataRow row = table.NewRow();
12             row[0] = "china";
13             row[1] = "中国";
14             row[2] = DBNull.Value;
15             table.Rows.Add(row);
16
17             row = table.NewRow();
18             row[0] = "henan";
19             row[1] = "河南省";
20             row[2] = "china";
21             table.Rows.Add(row);
22
23             row = table.NewRow();
24             row[0] = "zhumadian";
25             row[1] = "驻马店市";
26             row[2] = "henan";
27             table.Rows.Add(row);
28
29             row = table.NewRow();
30             row[0] = "luohe";
31             row[1] = "漯河市";
32             row[2] = "henan";
33             table.Rows.Add(row);
34
35             row = table.NewRow();
36             row[0] = "anhui";
37             row[1] = "安徽省";
38             row[2] = "china";
39             table.Rows.Add(row);
40
41             row = table.NewRow();
42             row[0] = "hefei";
43             row[1] = "合肥市";
44             row[2] = "anhui";
45             table.Rows.Add(row);
46
47             row = table.NewRow();
48             row[0] = "golden";
49             row[1] = "金色池塘小区";
50             row[2] = "hefei";
51             table.Rows.Add(row);
52
53             row = table.NewRow();
54             row[0] = "ustc";
55             row[1] = "中国科学技术大学";
56             row[2] = "hefei";
57             table.Rows.Add(row);
58
59             return table;
60         }

2.添加树的数据

 1 private void LoadData()
 2         {
 3             // 模拟从数据库返回数据表
 4             DataTable table = CreateDataTable();
 5             DataSet ds = new DataSet();
 6             ds.Tables.Add(table);
 7             ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["Id"], ds.Tables[0].Columns["ParentId"]);
 8
 9             foreach (DataRow row in ds.Tables[0].Rows)
10             {
11                 if (row.IsNull("ParentId"))
12                 {
13                     TreeNode node = new TreeNode();
14                     node.Text = row["Text"].ToString();
15                     node.Expanded = true;
16                     tree.Nodes.Add(node);
17                     ResolveSubTree(row, node);
18                 }
19             }
20         }

3.递归实现无限极添加

 1 private void ResolveSubTree(DataRow dataRow, TreeNode treeNode)
 2         {
 3             DataRow[] rows = dataRow.GetChildRows("TreeRelation");
 4             if (rows.Length > 0)
 5             {
 6                 treeNode.Expanded = true;
 7                 foreach (DataRow row in rows)
 8                 {
 9                     TreeNode node = new TreeNode();
10                     node.Text = row["Text"].ToString();
11                     treeNode.ChildNodes.Add(node);
12                     ResolveSubTree(row, node);
13                 }
14             }
15         }

递归方式实现树的展示形式

时间: 2024-09-28 20:14:50

递归方式实现树的展示形式的相关文章

简洁常用权限系统的设计与实现(四):不维护level,用递归方式构造树

第三篇中,我们通过维护节点的深度level,通过迭代所有的节点,只需要一次,就构造了树.  本篇,换一种方式. 好处是:不维护节点的深度level,增加和修改节点时,也不用维护.递归实现,代码比较清晰.  坏处是:节点较多的时候,性能可能不够好.不能直接查询到节点的深度level.当然,如果需要level字段,在递归过程中,是可以计算得到的.关于在递归过程中,计算level,后面有介绍这种方法. 关于树的遍历和查找,大家都有基础,上面描述了一些总体思路,代码中有注释,基本就不用再详细介绍了. /

二叉树(11)----求二叉树的镜像,递归和非递归方式

1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树镜像 比如: A                    

二叉树(8)----求二叉树第K层的节点数和二叉树第K层的叶子节点数,递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树第K层的节点数 (1)递归方式 给定根节点pRoot: 如

java将字符串逆序递归方式输出

最近找到这样的一个题目,如何将字符串采用递归方式输出: 如将字符串"hello world my friend and now"--〉now and friend my world hello 实现这个方法很多,我的方法可能效率比较低下,如果有更好的方法请指教. public static void main(String[] args) { System.out.println(reserve("")); } public static String reserv

用递归方式判断字符串是否是回文

题目要求:使用递归方式判断某个字串是否是回文( palindrome )回文”是指正着读.反着读都一样的句子.比如“我是谁是我” package zzm; import java.util.Scanner; public class Hw { static Scanner input=new Scanner(System.in); public static void main(String[] args) { System.out.print("请输入一串字符:"); String

C# 中采用treeview递归生成目录树(Winform和Webform两种)

部门表: 课程表: 查询结果结构: 数据结构分析,部门分为部门id和部门名称:课程分为课程id,课程名称,课程路径和课程所属部门. 要求以部门为父节点展示不同部门下的课程. Winform采用treeview递归生成目录树using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using Sy

二叉树(3)----后序遍历,递归和非递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.后序遍历 定义: 给定根节点,首先遍历左子树,然后遍历右子树,最后

二叉树基本操作:前序、中序、后序遍历(递归方式)

二叉树是最常见最重要的数据结构之一,它的定义如下: 二叉树(binary tree)是有限多个节点的集合,这个结合或者是空集,或者由一个根节点和两颗互不相交的.分别称为左子树和右子树的二叉树组成. 二叉树最基本的操作是遍历:一般约定遍历时左节点优先于右节点,这样根据根节点的遍历顺序可分为三种遍历操作:前序-先遍历根节点,再处理左右节点:中序-先遍历左节点,然后处理根节点,最后处理右节点:后序-先遍历左右节点,然后处理根节点. 从上边二叉树定义可以看出:二叉树使用了递归的概念描述.所以,二叉树的很

链表反转(递归方式,非递归方式)

//非递归方式进行链表反转 public ListNode reverseList(ListNode head){ if(head==null||head.next==null){ return head; }else { ListNode pre=head; ListNode p=head.next; ListNode next=null; while (p!=null) { next=p.next; p.next=pre; pre=p; p=next; } head.next=null; r