首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

怎么从树叶层开始建树三

2013-10-31 
如何从树叶层开始建树三?如何从树叶层开始建树,如何从树叶层开始建树?中的方法虽好,可对树的要求太严,如何

如何从树叶层开始建树三?

      如何从树叶层开始建树,如何从树叶层开始建树?中的方法虽好,可对树的要求太严格,如何从树叶层开始建树二?中的方法虽然使用各种情况,但毕竟递归了很多次,性能会差很多。

例如如下一棵树,要把叶节点是偶数的节点组成一棵树

怎么从树叶层开始建树三

也就是得到如下一棵树:便是一种典型应用。

 怎么从树叶层开始建树三

    于是自己也在思索能不能把如何从树叶层开始建树?中的方法进行扩展,使她可以使用所有情况,最总实现了,但必须知道每一个节点所在的层次。

例如如上的树:规定编号为1的层次为1,编号为2,3,4,的层次为2,编号5,6,7,8层次为3,以此类推。

这便有了对如何从树叶层开始建树?中的方法的改进。

   每一次循环只处理某一个层次的所有子节点,合并子节点,自然就不会出现混乱。而如何从树叶层开始建树?中的方法之所以不能处理此处的情况,便因为是里边的方法可能在某一次循环中处理了不同层次的节点,导致最后的错误。


核心代码如下:

 public static void TestGeTree( )        {            List<TreeNode> listAllNodes = GetAllNode();            Dictionary<int, List<TreeNode>> dicNode = GetLeafNode();            List<TreeNode> list = GeTree(listAllNodes, dicNode);        }        public static List<TreeNode> GetAllNode()         {            List<TreeNode> listAllNodes = new List<TreeNode>();            listAllNodes.Add(GetNode(1, null, 1));//根节点            listAllNodes.Add(GetNode(2, 1, 2));//第二层节点            listAllNodes.Add(GetNode(3, 1, 2));            listAllNodes.Add(GetNode(4, 1, 2));            listAllNodes.Add(GetNode(5, 2, 3));//第三层节点            listAllNodes.Add(GetNode(6, 2, 3));            listAllNodes.Add(GetNode(7, 3, 3));            listAllNodes.Add(GetNode(8, 3, 3));            listAllNodes.Add(GetNode(9, 5, 4));//第四层节点            listAllNodes.Add(GetNode(10, 5, 4));            listAllNodes.Add(GetNode(11, 7, 4));            listAllNodes.Add(GetNode(12, 7, 4));            listAllNodes.Add(GetNode(13, 9, 5));            return listAllNodes;        }        public static Dictionary<int, List<TreeNode>> GetLeafNode()        {            Dictionary<int, List<TreeNode>> dicNodeleafNode = new Dictionary<int, List<TreeNode>>();               dicNodeleafNode.Add(2, new List<TreeNode>(){GetNode(6, 2, 3)});                 dicNodeleafNode.Add(5, new List<TreeNode>() { GetNode(10, 5, 4) });                  dicNodeleafNode.Add(7, new List<TreeNode>() { GetNode(12, 7, 4) });                  dicNodeleafNode.Add(3, new List<TreeNode>() { GetNode(8, 3, 3) });                   dicNodeleafNode.Add(1, new List<TreeNode>() { GetNode(4, 1, 2) });                  return dicNodeleafNode;        }        private static TreeNode GetNode(int NodeID, int? parentid, int m_level)         {            TreeNode node1 = new TreeNode();            node1.NodeID = NodeID;            node1.NodeName = "node" + NodeID;            node1.ParentID = parentid;            node1.m_level = m_level;            return node1;        }


热点排行