两个算法的问题,请给个思路:)

jenf 2009-12-18 05:02:12
1、给出一个二叉树,请按层打印其值,即如果二叉树为
    A
B C
D E
则打印如下:
1:A->data
2: B->data,C->data
3: D->data,E->data


当然,二叉树的深度是不确定的。

2、给一个字符串如“AABBCCCEEGGG”,再给一个单词如“ACG”,计算第一个字符串中该单词可能出现的序列的个数,只要第一个字符串中有该单词的字母且顺序和单词中字母顺序相同即可,不要求全匹配,举例如下:
该字符串中有ACG的个数为18个,即第一个A分别可与第一,二,三个C匹配,而其又可分别与第一,二,三个G匹配,第二个A有和第一个A同样的匹配方式。
图例如下:
AABBCCCEEGGG
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
A C G
...全文
253 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujing_1007 2009-12-23
  • 打赏
  • 举报
回复
第一题树的按层次遍历,要用到辅助队列。
第二题动态规划,可以参考一下单调子序列问题。。。
pop6young 2009-12-19
  • 打赏
  • 举报
回复
看看+学习
晴天1999 2009-12-19
  • 打赏
  • 举报
回复
新手哈!多多指教哟
zwen1573 2009-12-19
  • 打赏
  • 举报
回复
第一题是用图的广度优先遍历二叉树,用队列可以;

第二题,大家说得动态规划方法,我也学习一下
dongdong301 2009-12-19
  • 打赏
  • 举报
回复
好帖子啊,非常值得学习
ahhh90h 2009-12-18
  • 打赏
  • 举报
回复
..........
c287050504 2009-12-18
  • 打赏
  • 举报
回复
学习了 。思路很明确
dskit 2009-12-18
  • 打赏
  • 举报
回复
第一题树的层次遍历
第二题动态规划

建议楼主自己去查资料,搞懂这两个基本算法,自己实现。
绿色夹克衫 2009-12-18
  • 打赏
  • 举报
回复
写了一个解第2题的,是一个m*n的DP,m和n分别是2个串的长度

using System;

namespace ConsoleApplication4
{
class Program
{
static string source;
static string patten;
static int[,] matrix;

static void Main(string[] args)
{
source = "ABCGABCG";
patten = "ACG";
matrix = new int[source.Length, patten.Length];
Console.WriteLine("Count = {0}" , Solve(0, 0));
}

static int Solve(int sStart, int pStart)
{
if (pStart == patten.Length)
return 1;

if (matrix[sStart, pStart] == 0)
{
int result = 0;

for (int i = sStart; i < source.Length; i++)
if (source[i] == patten[pStart])
result += Solve(i + 1, pStart + 1);

matrix[sStart, pStart] = result;
}

return matrix[sStart, pStart];
}
}
}
绿色夹克衫 2009-12-18
  • 打赏
  • 举报
回复
是这个意思,每读入一个父节点,将其子节点加入到队列尾部,这样直到队列为空,就相当于bfs了。

第二题,应该用DP可以,等有空写一个试试!

[Quote=引用 3 楼 jenf 的回复:]
楼上两位说的,我还是没太明白(数据结构太差了),是说用队列存储的时候,并相应地标识他的层级么?那队列是先进先出的,怎么将同一层的输出到一起?
[/Quote]
phpjspasp 2009-12-18
  • 打赏
  • 举报
回复
第一个层序遍历,第二个递归。我觉得。
jenf 2009-12-18
  • 打赏
  • 举报
回复
楼上两位说的,我还是没太明白(数据结构太差了),是说用队列存储的时候,并相应地标识他的层级么?那队列是先进先出的,怎么将同一层的输出到一起?
绿色夹克衫 2009-12-18
  • 打赏
  • 举报
回复
第一题就是bfs么,就像楼上说的,用队列即可,每次记录最左边或最右边的节点,
当遍历到其子节点时,就表示层级需要+1了!
hoya5121 2009-12-18
  • 打赏
  • 举报
回复
思路:按层访问二叉树,可以用队列

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧