| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖
标题:2W积分求一算法
只看楼主 加入收藏
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
 问题点数:0 回复次数:27 
2W积分求一算法
2W积分求一算法:

数据库中有一字段,标志着层次关系.第一层为1,它下面只能有两个数,为11,12,为第二层,第二层每个下面还是分别有两个,为111,112;121,122;每一层都可以有空缺,但是空缺的下面不能有数字了,求在同体系内从上到下,从左到右的第一个空缺位置的编号.比如下面图中的A位置.
要求算法简单.给出思路和算法.

数据库字段为
u_grade
1
11
12
121
1111
111
1112
一级一级传递,但是个点向下发展的速度可能不一样.比如可以11无下级但是12已经有了下级,这时候也能算出在该体系内从上到下从左到右的第一个空位的编号
.........




1
|
---------------------------------------
| |
11 12
| |
-------------------------- ------------------------
| | | |
111 112 121 122
| | | |
---------------- ------------ ----------- ---------------
| | | | | | | |
1111 1112 1121 1121 1211 A 1221 1222
| |
------- ------
| | |
11121 11211 11212
搜索更多相关主题的帖子: 2W积分 算法 数据库 空缺 字段 
2007-07-02 13:44
半支烟
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-16
收藏
得分:0 
asp我不懂,不过你这个题目想得到的结果就是A的编号吗,那么A层以后的数据就没用了是吧?

2007-07-02 14:04
大嘴先生2
Rank: 1
等 级:新手上路
威 望:2
帖 子:815
专家分:0
注 册:2006-4-17
收藏
得分:0 
zg...

骑白马的未必是王子,也可能是唐僧;有翅膀的未必是天使,也可能是鸟人。
2007-07-02 14:20
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
以下是引用半支烟在2007-7-2 14:04:06的发言:
asp我不懂,不过你这个题目想得到的结果就是A的编号吗,那么A层以后的数据就没用了是吧?

没有用,但是在推A的编号的时候可能有用


[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-02 14:30
madpbpl
Rank: 4
等 级:贵宾
威 望:11
帖 子:2876
专家分:244
注 册:2007-4-5
收藏
得分:0 

感觉楼主要求实现的是二叉树的遍历,不知道楼主打算用哪种语言或技术实现这个功能?

2007-07-02 14:53
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
这个很像树型结构,一般遍历树都是使用递归方法。
2007-07-02 15:11
半支烟
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-16
收藏
得分:0 
以下是引用MicroSoft在2007-7-2 14:30:40的发言:

没有用,但是在推A的编号的时候可能有用

A的编号就是那个数吗?是的话那就只与它的父亲和兄弟有关吗?与后面有什么关系呢?


2007-07-02 15:28
半支烟
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-16
收藏
得分:0 
是二叉数结构,但是可能会很大..

2007-07-02 15:29
madpbpl
Rank: 4
等 级:贵宾
威 望:11
帖 子:2876
专家分:244
注 册:2007-4-5
收藏
得分:0 

转载:http://www.cnblogs.com/xuanfeng/archive/2006/09/20/509897.html
[CODE]using System;
using System.Collections.Generic;
using System.Text;
/**//*
作者:旋风
日期:2006/9/20
博客园主页:xuanfeng.cnblogs.com

*/
namespace structure
{
class Program
{
二叉树结点数据结构的定义#region 二叉树结点数据结构的定义
//二叉树结点数据结构包括数据域,左右结点以及父结点成员;
class nodes<T>
{
T data;
nodes<T> Lnode, Rnode, Pnode;
public T Data
{
set { data = value; }
get { return data; }
}
public nodes<T> LNode
{
set { Lnode = value; }
get { return Lnode; }
}
public nodes<T> RNode
{
set { Rnode = value; }
get { return Rnode; }
}
public nodes<T> PNode
{
set { Pnode = value; }
get { return Pnode; }
}
public nodes()
{ }
public nodes(T data)
{
this.data = data;
}
}
#endregion
先序编历二叉树#region 先序编历二叉树
static void PreOrder<T>(nodes<T> rootNode)
{
if (rootNode != null)
{
Console.WriteLine(rootNode.Data);
PreOrder<T>(rootNode.LNode);
PreOrder<T>(rootNode.RNode);
}
}

#endregion
构造一棵已知的二叉树#region 构造一棵已知的二叉树
static nodes<string> BinTree()
{
nodes<string>[] binTree = new nodes<string>[8];
//创建结点
binTree[0] = new nodes<string>("A");
binTree[1] = new nodes<string>("B");
binTree[2] = new nodes<string>("C");
binTree[3] = new nodes<string>("D");
binTree[4] = new nodes<string>("E");
binTree[5] = new nodes<string>("F");
binTree[6] = new nodes<string>("G");
binTree[7] = new nodes<string>("H");
//使用层次遍历二叉树的思想,构造一个已知的二叉树
binTree[0].LNode = binTree[1];
binTree[0].RNode = binTree[2];
binTree[1].RNode = binTree[3];
binTree[2].LNode = binTree[4];
binTree[2].RNode = binTree[5];
binTree[3].LNode = binTree[6];
binTree[3].RNode = binTree[7];
//返回二叉树的根结点
return binTree[0];

}
#endregion
中序遍历二叉树#region 中序遍历二叉树
static void MidOrder<T>(nodes<T> rootNode)
{
if (rootNode != null)
{
MidOrder<T>(rootNode.LNode);
Console.WriteLine(rootNode.Data);
MidOrder<T>(rootNode.RNode);
}
}
#endregion
后序遍历二叉树#region 后序遍历二叉树
static void AfterOrder<T>(nodes<T> rootNode)
{
if (rootNode != null)
{
AfterOrder<T>(rootNode.LNode);
AfterOrder<T>(rootNode.RNode);
Console.WriteLine(rootNode.Data);
}
}
#endregion
层次遍历二叉树#region 层次遍历二叉树
static void LayerOrder<T>(nodes<T> rootNode)
{
nodes<T>[] Nodes = new nodes<T>[20];
int front = -1;
int rear = -1;
if (rootNode != null)
{
rear++;
Nodes[rear] = rootNode;
}
while (front != rear)
{
front++;
rootNode = Nodes[front];
Console.WriteLine(rootNode.Data);
if (rootNode.LNode != null)
{
rear++;
Nodes[rear] = rootNode.LNode;
}
if (rootNode.RNode != null)
{
rear++;
Nodes[rear] = rootNode.RNode;
}
}
}

#endregion
测试的主方法#region 测试的主方法
static void Main(string[] args)
{
nodes<string> rootNode = BinTree();
Console.WriteLine("先序遍历方法遍历二叉树:");
PreOrder<string>(rootNode);

Console.WriteLine("中序遍历方法遍历二叉树:");
MidOrder<string>(rootNode);

Console.WriteLine("后序遍历方法遍历二叉树:");
AfterOrder<string>(rootNode);

Console.WriteLine("层次遍历方法遍历二叉树:");
LayerOrder<string>(rootNode);

Console.Read();
}
#endregion
}
}[/CODE]

这是别人用c++做的,楼主看一下是否有帮助

2007-07-02 16:21
MicroSoft
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:2
帖 子:499
专家分:3
注 册:2006-10-12
收藏
得分:0 
谢谢大家先.
等待中

[glow=255,green,2]相信微软,相信我!~[/glow]
2007-07-02 16:26
快速回复:2W积分求一算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051659 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved