[工学]06-树.pptVIP

  • 5
  • 0
  • 约9.98千字
  • 约 51页
  • 2018-03-27 发布于浙江
  • 举报
[工学]06-树

A C (A)((B)(C)(DE))((F)(GHIJ)) ((C)(B)(DE))(A)((F)(HIGJ)) 先序遍历序列: 中序遍历序列: B DE HIGJ F 1.7.4 二叉树的遍历 A (A)((B)(C)((D)(E)))((F)((G)(HI)(J))) ((C)(B)((D)(E)))(A)((F)((HI)(G)(J))) 先序遍历序列: 中序遍历序列: B J F E D C HI G 1.7.4 二叉树的遍历 A (A)((B)(C)((D)(E)))((F)((G)((H)(I))(J))) ((C)(B)((D)(E)))(A)((F)(((H)(I))(G)(J))) 先序遍历序列: 中序遍历序列: B F D C G E H I J 1.7.4 二叉树的遍历 A B F D C G E H I J 1.7.4 二叉树的遍历 遍历算法应用 按先序遍历序列建立二叉树的二叉链表,已知先序序列为: A B C ? ? D E ? G ? ? F ? ? ? A B C D E F G 统计二叉树中叶子结点个数算法 A ^ B ^ C ^ D ^ E ^ F ^ ^ G ^ 建立一棵二叉树 1.7.4 二叉树的遍历 二叉排序树 定义:二叉排序树或是一棵空树,或是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值 它的左、右子树也分别为二叉排序树 二叉排序树的插入 插入原则:若二叉排序树为空,则插入结点应为新的根结点;否则,继续在其左、右子树上查找,直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子 二叉排序树生成:从空树出发,经过一系列的查找、插入操作之后,可生成一棵二叉排序树 1.7.5 二叉排序树 例 {10, 18, 3, 8, 12, 2, 7, 3} 10 10 18 10 18 3 10 18 3 8 10 18 3 8 12 10 18 3 8 12 2 10 18 3 8 12 2 7 10 18 3 8 12 2 7 3 中序遍历二叉排序树可得到一个关键字的有序序列 1.7.5 二叉排序树 —— 插入算法 void Create_Binary_Sort_tree(bnode **proot) { bnode *p,*q; elemtype k; int i,n; *proot=NULL; printf(“input n:”); scanf(“%d”,n); for(i=0;in;i++) { p=(bnode*)malloc(sizeof(bnode)); p-LC=NULL; p-RC=NULL; printf(“input k:”); scanf(“%d”,k); if(*proot==NULL) *proot=p; else{ q=*proot; while(q!=NULL) { if(q-datak) if(q-LC!=NULL) q=q-LC; else{ q-LC=p;q=NULL;} else{ if(q-RC!=NULL) q=q-RC; else{ q-RC=p; q=NULL;} }/*end else*/ }/*end while*/ }/*end else*/ }/*end for*/ }/*end function*/ 1.7.5 二叉排序树 void addnode(bnode *root,bnode *p) { bnode *q; q=root; while(q!=NULL) { if(q-datap-data) { if(q-LC!=NULL) {q=q-LC;} else {q-LC=p;q=NULL;} } else { if(q-RC!=NULL) {q=q-RC;} else {q-RC=p;q=NULL;} } }/*end while*

文档评论(0)

1亿VIP精品文档

相关文档