.①二叉樹用來表示表達式因為需要保存各子樹的值修改二叉樹的結點結構為(LchildDataValRchild)其中LchildRchild的意義同前Val用來存放以該結點為根的子樹的值值的類型依具體情況而定為了簡便起見算法假定所考慮的表達式只有+*/ 四種二目運算且已表示成相應的二叉樹算法所計算的表達式值放在根結點的Val域中
PROC Postordereval(t:ptrType)
BEGIN IF (t!=NULL)
BEGIN ()_______; ()_______;
CASE t^data:
+: t^Val:=t^ Lchild^ Val + t^ Rchild ^ Val; BREAK;
: t^Val:=t^ Lchild^ Val t^ Rchild ^ Val; BREAK;
*: t^Val:=t^ Lchild^ Val * t^ Rchild ^ Val; BREAK;
/: t^Val:=t^ Lchild^ Val / t^ Rchild ^ Val; BREAK;
otherwise: ()_____; BREAK;
ENDCASE END
END;
②PROC Delete(x:datatypeA:tree)
BEGIN tempA:= ()_____;
WHILE (tempA^Item!=x) AND (tempA!=NULL) DO
IF (x<tempA^item) BEGIN r:=tempA; tempA:= ()_____; END
ELSE BEGIN r:=tempA;tempA:=tempA^Rchild;END;//tempA為要刪結點r為tempA的父親
IF ()_____ return(x);
IF (tempA^Lchild!=NULL) AND (tempA^rchild!=NULL)
BEGIN t:=tempA; q:=tempA^Rchild;
WHILE (q^Lchild!=NULL) DO BEGIN t:=q; q:=q^Lchild; END;
t^Lchild:= ()_____; //刪去q
q^Lchild :=tempA^Lchild; q^Rchild:=tempA^Rchild;
IF (tempA^item< r^item) r^Lchild := ()______ ELSE r^Rchild:=q //用q代替 tempA
END;
ELSE IF(tempA^Lchild!=NULL) IF(tempA^item<r^item) r^Lchild:=tempA^Lchild
ELSE r^Rchild:=tempA^Lchild
ELSE IF(tempA^Rchild!=NULL) IF(tempA^item<r^item) r^Rchild:= ()_____
ELSE r^Lchild:=tempA^Rchild
ELSE //tempA為樹葉
IF()_ r^Lchild:=NULL ELSE r^Rchild:=NULL
END; 【中山大學 四 (分)】
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23479.html