【正文】
return(p)。 plchild = pl。 pr = create(pre, in, prepos + i low + 1, i + 1, high)。 } BiNodeT *pl, *pr。 i++){ if(in[i] == pre[prepos]){ break。 for(int i = low。 // 構(gòu)造右子樹(shù) 小結(jié) 1)二叉樹(shù)的順序存儲(chǔ)表示 2)二叉樹(shù)的二叉鏈表存儲(chǔ)表示 二叉鏈表 雙親鏈表 三叉鏈表 3)二叉樹(shù)的遍歷 前序(先根) 中序(中根) 后序(后根) 作業(yè) 作業(yè): , , 建立二叉樹(shù) 由二叉樹(shù)的先序和中序序列建樹(shù) 二叉樹(shù)的先序序列: 二叉樹(shù)的中序序列: 左子樹(shù) 左子樹(shù) 右子樹(shù) 右子樹(shù) 根 根 ^ ^ ^ ^ ^ ^ ^ ^ 建立二叉樹(shù) a b c d e f g c b d a e g f a a b b c c d d e e f fg a b c d e f g 先序 : 中序 : 建立二叉樹(shù) BiNodeT * BitreeT::create(T pre[], T in[], int prepos, int low, int high) { if(low high) return(NULL)。 CreateBiTree(Tlchild)。 39。 if (!(T = new BiTNode) exit(OVERFLOW)。 else { } Tdata = ch。T) { } // CopyTree scanf(amp。 return(p)。 plchild = pl。 pdata = Tdata pl = Copy(Tlchild)。 復(fù)制二叉樹(shù) (練習(xí) ) 給定一棵二叉樹(shù), T指向其根結(jié)點(diǎn),復(fù)制一棵二叉樹(shù),返回一個(gè)指向新樹(shù)根結(jié)點(diǎn)的指針 根元素 T 右子樹(shù) 根元素 NEWT 左子樹(shù) 右子樹(shù) 左子樹(shù) 復(fù)制二叉樹(shù) 如果 T為空,則返回空指針 復(fù)制根結(jié)點(diǎn), p指向新結(jié)點(diǎn) 復(fù)制左子樹(shù), pl指向左子樹(shù)的根 復(fù)制右子樹(shù), pr指向右子樹(shù)的根 plchid = pl, prchild = pr 返回 p 復(fù)制二叉樹(shù) Bitree Copy(BitTree T){ if(!T) return(NULL)。 else return(Search(Trchild, x)) 。 A B E C D T X= C 查詢二叉樹(shù)中的某個(gè)結(jié)點(diǎn) 1. 在二叉樹(shù)不空的前提下 ,和根結(jié)點(diǎn)的元素進(jìn)行比較 ,若相等 ,則找到返回指向根結(jié)點(diǎn)的指針 2. 否則在左子樹(shù)中進(jìn)行查找 ,若找到 ,則返回指針 3. 否則繼續(xù)在右子樹(shù)中進(jìn)行查找 ,若找到 ,則返回指針 ,否則返回空指針 查詢二叉樹(shù)中的某個(gè)結(jié)點(diǎn) BiTree Search (BiTree T, TElemType x) { } if (!T) return(NULL)。 return depthval。 depthRight= Depth( Trchild )。 求二叉樹(shù)的深度 課堂練習(xí): 空樹(shù)的深度為 0, 求二叉樹(shù)的深度 i