网站大量收购独家精品文档,联系QQ:2885784924

[工学]第6讲 二叉树应用.ppt

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

二叉排序树(Binary Searching Tree), 或为空树,或为具有如下性质的一棵树: 若左子树非空, 则左子树上所有节点关键字均小于根节点的关键字; 若右子树非空, 则右子树上所有节点的关键字均大于根节点的关键字; 左右子树本身又各为一棵二叉排序树. ADT BinarySortingTree is Data: BTreeNode *BST; Operation: bool Find (BTreeNode *BST, ElemType x ) ; bool Update (BTreeNode *BST, const ElemType x ) ; void Insert (BTreeNode *BST, const ElemType x ) ; bool Delete (BTreeNode *BST, const ElemType x ) ; end BinarySortingTree bool Find (BTreeNode *BST, ElemType x) 查找过程: 若二叉树BST为空,则查找失败, 返回 false; 否则: 若 x 等于当前根节点的值(对于记录类型为关键字域的值)相等, 则查找成功, 用引用参数 x 带回根节点的值并返回真; 若x小于根节点值, 则继续在左子树上查找; 若x大于根节点值, 则继续在右子树上查找; bool Find (BTreeNode *BST, ElemType x) { if ( BST == NULL) return false ; else { if ( x == BST→data ) { x = BST→data ; return true ; } else if ( x BST→data) return Find ( BST→left , x ) ; else return Find ( BST→right , x ) ; } } bool Find ( BTreeNode *BST , ElemType x) { while ( BST != NULL ) { if ( x == BST→data ) { x = BST→data ; return true; } else if ( x BST→data ) BST = BST→left ; else BST = BST→right; } return false ; } 给定值同树中节点比较次数最少为1次(和根节点);最多为树的深度; 平均查找次数小于等于树的深度; 若为理想平衡树(除最后一层外,其余各层均满,且最后一层节点可任意分布)或接近理想平衡树,则进行查找的时间复杂度为:O ( log2n ) 最差为 O(n) (单分支树) ; 空间复杂度为 O ( 1 ) ; void Insert ( BTreeNode * BST, const ElemType x) 若二叉树BST为空,则由x元素生成的新节点做为根节点插入; 否则: 若x小于根节点, 则将新节点插入到根的左子树上; 若x大于根节点, 则将新节点插入到根的右子树上; void Insert (BTreeNode *BST,const ElemType x){ if ( BST == NULL) { BTreeNode *p = new BTreeNode ; p→data = x; p→left = p→right = NULL ; BST = p ; } else if ( x BST→data ) Insert ( BST→left , x ) ; else Insert ( BST→right , x ) ; } void Insert (BTreeNode *BST, const ElemType x){ BTreeNode *q = BST ; *p = NULL ; while ( q != NULL ) { p = q ; if ( x q→data ) q = q→left ; else q = q→right ; } BTreeNode *s = new BTreeNode ; s→data = x ; s→left = S→right = NULL ; if ( p == NULL ) BST = s ; else if ( s→data p→data ) p→left = s ; else p→right = s ; } void Insert(BTreeNode * BST , const ElemType x) { BTreeNode *q = BST, *p = NULL

文档评论(0)

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

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

1亿VIP精品文档

相关文档