树和二叉树1.pptVIP

  • 3
  • 0
  • 约1.19万字
  • 约 80页
  • 2016-08-22 发布于河南
  • 举报
树和二叉树1

二叉排序树的结点删除(被删除结点有左孩子) f p f p p是左孩子 p是右孩子 二叉排序树 结点删除算法 bstnode *Delnode(bstnode *t, keytype k) { bstnode *p,*f,*s,*q; p=t; f=NULL; while (p!=NULL) { if (p-key==k) break; f=p; if (p-keyk) p=p-lchild; else p=p-rchild; } if (p==NULL) return t; if (p-lchild==NULL) { if (f==NULL) t=p-rchild; else if (f-lchild==p) f-lchild=p-rchild; else f-rchild=p-rchild; free(p); } 二叉排序树 结点删除算法 else { q=p; s=p-lchild; while (s-rchild!=NULL) {q=s; s=s-rchild;} if (q==p) q-lchild=s-lchild; else q-rchild=s-lchild; p-key=s-key; p-other=s-other; free(s); } return t; } 50 30 80 20 40 10 90 60 70 ( return null ) N Y Ptr = = Null Ptr=root Search(char info) ptr-info = = info ? Y ( return ptr ) ptr = ptr-llink N Y info ptr - info ? ptr = ptr-rlink 查找 info = 62 root 二叉排序树 结点查找算法 bstnode *BSTSEARCH(bstnode *t,keytype k) { while (t!=NULL) { if (t-key==k) return t; if (t-keyk) t=t-lchild; else t=t-rchild; } return NULL; } 二叉排序树 结点查找算法 A C B E D 树 A B C D E 二叉树 A ^ ^ B C ^ D ^ ^ E ^ A ^ ^ B C ^ D ^ ^ E ^ A ^ ^ B C ^ D ^ ^ E ^ 对应 存储 存储 解释 解释 树与二叉树转换 树和二叉树 I A C B D H G F E F I A B D H G C E 树 根 结点 X 的第一个孩子 结点 X 紧邻的右兄弟 二叉树 根 结点 X 的左孩子 结点 X 的右孩子 树转换成二叉树 将树转换成二叉树 加线:在兄弟之间加一连线 抹线:对每个结点,除了其左孩子外,去除其与其余孩子之 间的关系 旋转:以树的根结点为轴心,将整树顺时针转45° A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I 树转换成的二叉树其右子树一定为空 将二叉树转换成树 加线:若p结点是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子,……沿分支找到的所有右孩子,都与p的双亲用线连起来 抹线:抹掉原二叉树中双亲与右孩子之间的连线 调整:将结点按层次排列,形成树结构 A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I A B C D E F G H I 树的存储表示 树的广义表表示 广义表表示 双亲表示 树的存储--双亲链表表示法 #define maxnode 32 typedef struct { datatype data; \\ 数据域 int parent; \\ 游标域 } ptree; ptree T[maxnode]; 双亲表示 求长子的算法 int FIRSTCHILD(ptree T[],int i) { int j; for (j=i+1;jmaxnode;j++) if

文档评论(0)

1亿VIP精品文档

相关文档