第六章 树和二叉树

Click here to load reader

Upload: naomi

Post on 04-Jan-2016

92 views

Category:

Documents


4 download

DESCRIPTION

第六章 树和二叉树. 树的概念与定义 二 叉 树 二叉树的遍历与线索化 树和森林 哈夫曼树及其应用 树的计数 *. 6. 1 树的概念与定义. 树的定义: 树 (tree) 是 n(n≥0) 个结点的有限集 T ,当 n=0 时,称为空树;当 n>0 时,满足以下条件: ( 1 )有且仅有一个结点被称为树根( root )结点; ( 2 )当 n>1 时,除根结点以外的其余 n-1 个结点可以划分成 m(m>0) 个互不相交的有限集 T1,T2, … , Tm ,其中每一个集合本身又是一棵树,称为根的子树 (subtree) 。. - PowerPoint PPT Presentation

TRANSCRIPT

  • *

  • 6. 1(tree)n(n0)Tn=0n>0 1root2n>1n-1m(m>0)T1,T2,Tm(subtree)

  • 6.1

  • (node) (degree)6.1A3 (leaf)06.1KLFGMIJ 06.1ABCD

  • (child)6.1ABCDBEF (parents)6.1IDLE (sibling)6.1BCDKL

  • 6.13(level)ll+16.1A1M4(depth)6.14 (forest)m(m0)

  • 6.2 n(n0)T

  • 1 i2i-1(i1) 2 k2k1k>=1 3 BTn02n2n0n21 4 nlog2n1xx

  • 5 ni(1in) (1) i=1ii>1i/2 (2) 2i>ni2in2i (3) 2i+1>ni2i+1n2i+1

  • k2k-1 knk1n

  • :1111

  • :3 nn+1

  • 6.3 1 2 3

  • 123 1 23

  • : -+a*bcd/ef: a+b*cde/f: abcd-*+ef/-

  • typedef struct Node{ datatype data; struct Node *Lchild; struct Node *Rchild; } BTnode,*Btree;

  • void preorder(Btree root){ if(root!=NULL) { Visit(root->data); preorder(root->Lchild); preorder(root->Rchild); }}

  • void InOrder(Btree root){ if(root!=NULL){ InOrder(root->Lchild); Visit(root->data); InOrder(root->Rchild); }}

  • void PostOrder(Btree root){if(root!=NULL) { PostOrder(root->Lchild); PostOrder(root->Rchild); Visit(root ->data); }}

  • n+1 ,2

  • 0 LchildLtag= 1 Lchild 0 RchildRtag= 1 Rchild

  • (b) (a)

  • visitvisit

  • Void paintnode (Btree root) { if (root!=NULL) { printf (root ->data); paintnode (root ->Lchild); paintnode (root ->Rchild); }}

  • Void paintleaf (Btree root) { if (root!=NULL) { if(root->Lchild==NULL && root->Rchild==NULL) printf (root ->data); paintleaf (root ->Lchild); paintleaf (root ->Rchild); }}

  • Void leafcount(Btree root){ if(root!=NULL) { leafcount(root->Lchild); leafcount(root->Rchild); if (root ->Lchild==NULL && root ->Rchild==NULL) count++; }}

    count

  • ABDGCEHFABDGCEHF

  • (datatypechar)Void CreateBtree(Btree *bt){ char ch; ch=getchar(); if(ch=='.') *bt=NULL; else { *bt=(Btree)malloc(sizeof(BTnode)); (*bt)->data=ch; CreateBiTree(&((*bt)->Lchild)); CreateBiTree(&((*bt)->Rchild)); }}

  • 1021 int TreeDepth(Btree bt) { int hl,hr,max; if(bt!=NULL) { hl=TreeDepth(bt->Lchild); hr=TreeDepth(bt->Rchild);

  • max=(hlhr); return(max+1); } else return(0);}

  • p,p->Ltag=1p->Lchildpp->Ltag=0pp Void Previous(ThreadTnode * p, ThreadTnode *pre){ThreadTnode *q; if(p->Ltag==1) pre= p->Lchild; else { for(q= p->Lchild;q->Rtag==0;q=q->Rchild); pre=q; }}

  • pp->Rtag=1p->Rchildpp->Rtag=0pp Void Succedent(ThreadTnode *p, ThreadTnode *succ) {ThreadTnode *q; if (p->Rtag==1) succ= p-> RChild; else { for(q= p->RChild; q->Ltag==0 ;q=q->LChild ); succ=q; }}

  • 6.4

  • #define Maxsize 50typedef struct Node{ DataType data; int parent;}Tnode;Tnode Ptree[Maxsize];

  • 101124440601234578dataparent6.10(a) (b)

  • nn

    #define Maxsize 50typedef struct ChildNode{ int Child; struct ChildNode * next;}ChildNode;typedef struct{ DataType data; ChildNode * ChildHead ;}DataNode; DataNode Ctree[Maxsize];

  • 6.10

  • typedef struct CSNode{ DataType data; Struct CSNode *FirstChild, *Nextsibling;}*CSTree;

  • 6.14

  • 45

  • ppp

  • a. b. a. b. n

  • ABEFIGCDHJKLNOMEIFGBCJKNOLMHDAABCDEFGHIJKLMNO

  • a. b. c. a. b. c. a. b. c.

  • A B C D E F G H I JB C D A F E H J I GD C B F J I H G E A6.18(a)

  • 6.5

  • nWPL

  • 475244WPL=7*2+5*2+2*2+4*2=36WPL=7*3+5*3+2*1+4*2=46WPL=7*1+5*2+2*3+4*3=35

  • HuffmanHuffman Huffmann{w1,w2,wn}nwj

  • w={5, 29, 7, 8, 14, 23, 3, 11}

  • 6.24a6.24 b

  • 6.24a80% 5154030106.24b,

  • 7

  • typedef struct Node{ int weight ; int parent, LChild,RChild ;} HTNode, * HTree;typedef char * *HuffmanCode ;

    viod CreatHTree(HTree *ht , HuffmanCode *hc,int * w, int n){ /*wn,ht,hc */ int start; m=2*n-1; *ht=(HTree)malloc((m+1)*sizeof(HTNode));

  • for(i=1;i
  • /**/*hc=(HuffmanCode)malloc((n+1)*sizeof(char *));cd=(char * )malloc(n * sizeof(char));cd[n-1]\0for(i=1;i
  • 6.6 * n n n0b01 n1b11 n2b226.26 n3b356.276.26 n2 6.27 n3

  • n(n>1)in-i-16.280in-1 6.28 n

  • n3b3b0*b2 +b1* b1 +b2* b0=5

  • ntn n-1tn=bn-1 43 6.31