网站大量收购闲置独家精品文档,联系QQ:2885784924
  1. 1、本文档共69页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树树

* * * * * * * * * * * * * * * * * * * * * * * * * * * §6.7 回溯法与搜索树 N皇后算法 设try[0..n-1]存放解,下标为行,值为列,即:设try[i]=j,则(i, j)表示棋盘上第i行,第j列存一皇后,逐行放置,每行只有一皇后故可不考虑行冲突,只要考虑列和2条对角线冲突。 void Queens(i, col, diag45, diag135){ //i, col, diag45, diag135为值参 // 全局量try进入此处时,部分解try[0..i]已求出,col,diag45,diag135 // 是集合,初始调用为Queens(-1, Ф,Ф, Ф) if (i == n-1) print try[0..n-1]; // 输出一个解 else // 试求部分解try[0..i+1],即在(i+1)行上放皇后 for (j = 0; j n; j++) // 试探在第(i+1)行上放皇后 if (j col j-(i+1) diag45 (i+1)+j diag135) { // (i+1, j)位置安全 try[i+1] = j; Queens(i+1, col∪{j}, diag45∪{j-i-1}, diag135∪{i+j+1}); } // endif } // 回溯过程要跟踪执行过程才能发现 * §6.7 回溯法与搜索树 N皇后算法 上述算法的执行过程就是Fig6.29的状态树(先序遍历) 改进 实际算法可设置布尔数组(初始值均为false)来测试安全性 放置皇后(i+1, j) 令:col[j] = true, 表示第j列已有皇后 diag45[(n-1)+j-(i+1)]=true,表示该对角线上已有皇后 // 移位n-1 diag135[(i+1)+j]=true,表示该对角线上已有皇后 测试安全性 if (!col[j] !diag45[n-i+j-2] !diag135[i+1+j]) Note: 用数组要注意它们不是值参,因此可将其说明为结构,内含数组 * §6.8 树的计数 问题:一棵具有n个结点的二叉树有多少种不同形态? 二叉树相似: T和T’相似: 指形态相同,不考虑结点中数据是否相同,否则为树等价 二叉树的计数问题:求n个结点互不相似的二叉树数目bn. 二者皆空,否则 二者不空时,它们的左右子树相似 * §6.8 树的计数 一般情况: 利用生成函数可求出此递推公式的解为(教材): 树的计数问题 n个结点的树的形态数目 ,∵树转换为二叉树后,根无右子树 遍历序列能否唯一确定一棵二叉树? 二叉树确定后,其三种遍历序列唯一确定 反之,能唯一确定一棵二叉树吗? * §6.8 树的计数 由一棵二叉树的前序序列(或后序序列)+中序序列可唯一确定该二叉树 例:已知某二叉树的前序序列:ABCDEFG,中序序列:CBEDAFG,求对应的二叉树。 由前序序列+后序序列不能唯一确定一棵二叉树 例:前:ABC 后:CBA 由一个遍历序列更不能唯一确定一棵二叉树。 作业 已知一棵二叉树的先序遍历序列和中序遍历序列分别为ABDGHCEFI和GDHBAECIF,请画出这棵二叉树对应的中序线索树,然后给出该树的后序遍历序列。 假设用于通信的电文是由字符集{a, b, c, d, e, f, g, h}中的字符构成, 这8个字符在电文中出现的概率分别为{0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10} 。 ① 请画出对应的huffman树(按左子树根结点的权小于等于右子树根结点的权的次序构造)。 ② 求出每

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档