递归问题,在线等
using System;
using System.Data;
using System.Text;
namespace ConsoleApplication1
{
public class Program
{
/// <summary>
/// 获取模拟数据
/// </summary>
private static DataTable GetContent()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Pid", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, 0, "A");
dt.Rows.Add(2, 0, "B");
dt.Rows.Add(3, 1, "C");
dt.Rows.Add(4, 3, "D");
dt.Rows.Add(5, 2, "E");
dt.Rows.Add(6, 5, "F");
dt.Rows.Add(7, 3, "G");
return dt;
}
private static string Recursive(DataTable dt, DataRow row,out int id)
{
//查找是否有子节点
var rows = dt.Select("Pid=" + row["Id"]);
//如果有子节点,那么加上其全部的父节点
if (rows != null && rows.Length > 0)
{
foreach (var subrow in rows)
{
return row["Name"].ToString() + "==>" + Recursive(dt, subrow,out id);
}
}
id = Convert.ToInt32(row["Id"]);
return row["Name"].ToString();
}
static void Main(string[] args)
{
DataTable dt = GetContent();
int id = 0;
foreach (DataRow srow in dt.Select("Pid=0"))
{
Console.WriteLine("路径:"+Recursive(dt,srow,out id)+"\t最终子节点的Id:"+id);
}
}
}
}这里输出的结果是:
路径:A==>C==>D 最终子节点的Id:4
路径:B==>E==>F 最终子节点的Id:6
我想要的结果是
路径:A==>C==>D 最终子节点的Id:4
路径:A==>C==>G 最终子节点的Id:7
路径:B==>E==>F 最终子节点的Id:6
应该怎么改,就大神看看
...全文
相关推荐
leetcode递归专题-programming_solutions:包含不同在线编程网站编程问题解决方案的存储库
该项目包含多种经典编程问题及在线平台(如LeetCode、Codility)的算法解决方案,涵盖全排列、二进制加法等典型题目,采用递归、回溯等技术,支持Java和JavaScript语言实现,旨在提升
基于贝叶斯推理的递归算法在线更新基于信念规则的管道泄漏检测专家系统
递归算法:递归算法是一类以自我调用方式运行的算法,通常用于解决问题,这些问题可以通过解决相似的子问题来解决。在本研究中,递归算法被用来持续地更新专家系统规则,以便于系统能够实时反映管道的状态。
javascript-leetcode面试题解递归与回溯问题之第59题递归矩阵-题解.zip
在JavaScript编程领域,LeetCode是一个非常重要的在线平台,它提供了大量的编程题目,帮助开发者提升算法能力和准备求职面试。
行业分类-外包设计-基于递归在线算法的进程任务块可疑依赖关系的优化方法的说明分析.rar
递归在线算法在此起着至关重要的作用。递归算法是一种通过自我调用来解决问题的方法,而在线算法则是在数据逐步到达时进行处理,不预先知道所有输入的情况下作出决策。
LeetCodeProblems:LeetCode问题通过递归,时间复杂度和动态编程解决
在IT领域,LeetCode是一个非常受欢迎的在线平台,它提供了大量的编程题目,旨在帮助开发者提升算法和数据结构技能。


