Click here to load reader

 第 6 章 树和二叉树

Embed Size (px)

DESCRIPTION

 第 6 章 树和二叉树. 【 本章教学目的、要求 】 1 、理解树的定义和基本操作; 2 、理解二叉树和哈夫曼树的定义及其特点; 3 、理解常见实例的编程思想。. 主要内容. 6.0 前言 6.1 树的定义和基本操作 6.2 二叉树 6.3 哈夫曼树和判定树 6.4 应用举例及分析 习题. 6.0 前言. 树形结构中结点之间有分支关系,又具有层次关系,它非常类似于自然界中的树。树形结构在现实世界中广泛存在: 例如家谱、各单位的行政组织机构等都可用树来表示。 树在计算机领域中也有着广泛的应用: - PowerPoint PPT Presentation

Citation preview

  • 6123

  • 6.0 6.1 6.2 6.3 6.4

  • 6.0 DOSWindows

  • 6.1 6.1.1 6.1.26.1.3

  • 6.1.1 1(tree)n (n 0)n = 0T (root) n > 1m (m > 0)T1T2Tm(subtree)6.1 (a)(b)13A T1 = {B, E, F, K, L}T2 = {C, G}T3 = {D, H, I, J, M}T1, T2, T3

  • 6.1.1 26.1(b)6.1 (c)

  • 6.1

  • 6.1.21(degree)0(leaf)0(child)(parent)(sibling)

  • 6.1.22(level)(depth)

  • 6.1.236.1(c)AA3E2L0KLFGMIJABCDAABCDHIJDHIJHG4

  • 6.1.24()(forest)m(m0) 6.3

  • 6.3

  • 6.1.31 TREEEMPTY(T)TTRUEFALSE2 ROOT(T) TT3 TREEDEPTH(T) T4VALUE(T, e) eTe5 PARENT(T, e) eTee6CHILD(T, e, i) eTei7 CREATE_TREE(T, T1, T2, , Tk)k1TT1, T2, , Tk1, 2, , k

  • 6.2 6.2.1 6.2.2 6.2.36.2.4

  • 6.2.1 1(binary tree)n (n 0) n = 0n026.4

  • 6.2.1 21 TREEEMPTY(BT)BTTRUEFALSE2 ROOT(BT) BTBT3 TREEDEPTH(BT) BT4VALUE(BT, e) eBTe5 PARENT(BT, e) eBTee

  • 6.2.1 36 LCHILD(BT, e) eBTe7RCHILD(BT, e) eBTe8CREATE_BT(BT, LBT, RBT)BTLBTRBTBT

  • 6.4

  • 6.2.2 11 i2i-1(i1)424-1 = 23 = 8i = 12i-1 = 20 = 1j(1j
  • 6.2.2 23 n02n2n0 = n2 + 1(comlpete binary tree)(full binary tree)k2k - 16.5(a)41

  • 6.2.2 3k (k > 1) 1k-1k-1k2k-16.5(b)6.5(c)6.5(d)

  • 6.2.2 44nlog2n+ 15 ni (1 i n)1 i = 1ii > 1i i/22 2i ni2ii3 2i + 1 ni2i + 1i

  • 6.2.2 56 n1 n/2 n/2

  • 6.5

  • 6.2.311()56.6(a)

  • 6.2.326.6(b)kk2k -16.6(c)

  • 6.2.33216.7(a)#define DATATYPE2 chartypedef struct node1 { DATATYPE2 data; struct node1 *lchild, *rchild;}BTCHINALR;

  • 6.2.34BTCHINALRrootroot = NULLn2nn-1n+16.7(b)2

  • 6.2.35#define DATATYPE2 chartypedef struct node2{ DATATYPE2 data; struct node2 *lchild, *rchild, *parent;}BTCHINALRP;6.7(c)6.7(d)

  • 6.6

  • 6.7

  • 6.2.4 1(traversing binary tree)L,D,RDLRLDRLRDDRLRDLRLD

  • 6.2.4 21(1) (2) (3) void preorder(BTCHINALR * bt){ if(bt != NULL) { printf(%c ,bt->data) ; preorder(bt->lchild); preorder(bt->rchild) ;}}

  • 6.2.4 32(1) (2) (3) void inorder(BTCHINALR *bt){ if(bt != NULL) { inorder(bt->lchild); printf(%c ,bt->data); inorder(bt->rchild); }}

  • 6.2.4 43(1) (2) (3) void postorder(BTCHINALR *bt){ if(bt != NULL) { postorder(bt->lchild); postorder(bt->rchild); printf(%c ,bt->data);}}

  • 6.2.4 56.8BT

  • 6.8 BT

  • 6.3 6.3.1 6.3.2

  • 6.3.1 1(Huffman)12(weighted path length of tree)

  • 6.3.1 2WPL=wilinwi li in(w1, w2, w3, , wn)nwi6.164A, B, C, D7, 5, 2, 4364635WPL

    ni=1

  • 6.3.1 33 n{w1, w2, , wn}WPL(1) n{w1, w2, , wn}nF = {T1, T2, , Tn}Tiwi(2) F

  • 6.3.1 4(3) FF(4) (2)(3)F6.17{12322}(1) (2) (3) WPL(4) 1n0 = n2 +1n2n-1

  • 6.16

  • 6.17

  • 6.3.2 1ABAACCBADCA bitA, B, C, D00, 01, 10, 11000100001010010011100022bit

  • 6.3.2 2ACABCD0, 00, 1, 0114bit000001100001105000000AAAAAABAA

  • 6.3.2 3wi()linwiliWPL0, 1ABCD0.4, 0.3, 0.2, 0.16.18ni=1

  • 6.3.2 421bit 01000110110100111110010

  • 6.18

  • 6.4 16.1 Void inorder_notrecursive(BTCHINALR *bt){ BTCHINALR *q, *s20; int top = 0; int bool = 1; q = bt; do { while(q != NULL) { top ++; stop = q; q = q->lchild; }

  • 6.4 2if(top == 0) bool = 0; else { q = stop; top --; printf(%ct, q->data); q = q->rchild; } } while(bool); }

  • 6.4 36.2 ABCDEFGHIJKEBADCFHGIKJEBADCFHGIKJEABCDEFGHIJKABCDFGHIJK6.21(a)EBADCFHGIKJ BADCBABCDBABCD6.21(b)6.21(c)

  • 6.21

  • 6.1 6.236.2 36.3 6.246.4 6.246.5 BDCEAFHGDECBHGFA6.6 6.236.7 (7, 18, 3, 32, 5, 26, 12, 8)6.887, 19, 2, 6, 32, 3, 21, 108

  • 6.23

  • 6.24