pascal程式設計求樹的後續遍歷

時間 2025-06-22 04:05:22

1樓:網友

其實用string儲存更簡嫌渣單。

中心偽**宴拍。

樹存在s裡(string)

procedure hx(n:longint);

beginif n*2+1>芹祥悄=長度 then hx(n*2+1); 左。

if n*2>=長度 then hx(n*2); 右。

write(s[n]);中。

end;

pascal求3道有關樹的遍歷

2樓:枕頭與鬧鐘

1.先序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則。

訪問根結點。

先序遍歷左子樹。

先序遍歷右子樹。

很明顯,這是一種遞迴定義,下面給出一種手工方法(括號法)求先序遍歷的結果。

2.中序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則。

中序遍歷左子樹。

訪問根結點。

中序遍歷右子樹。

可以根據以上方法,得出上圖中序遍歷的結果為:

3.後序遍歷的操作定義如下:

若二叉樹為空,則空操作,否則。

後序遍歷左子樹。

後序遍歷右子樹。

訪問根結點。

可以根據以上方法,得出上圖後序遍歷的結果為:

顯然,以上3種遍歷方法都是採用遞迴的思想,下面以先序遍歷為例給出遞迴演算法:

procedure preorder(bt:tree);

beginif bt<>nil then begin

write(bt^.data);

preorder(bt^.lchild);

preorder(bt^.rchild);

end;end;

我們也可以把遞迴過程改成用棧實現的非遞迴過程,下面給出先序遍歷的非遞迴過程。

procedure inorder(bt:tree);

var stack:array[1..n] of tree;

top:integer;

p:tree;

begintop:=0;

while not ((bt=nil)and(top=0)) do

beginwhile bt<>nil do begin

write(bt^.data);

top:=top+1;

stack[top]:=bt^.rchild;

bt:=bt^.lchild;

end;if top<>0 then begin

b:=stack[top];top:=top-1;

end;end;

end;關於前面講的表示式樹,我們可以分別用先序、中序、後。

序的遍歷方法得出完全不同的遍歷結果,對於圖11採用三種遍歷後的結果如下,它們正好對應著表示式的三種表示方法:

a*b-cd/ef (字首表示、波蘭式)

a+b*c-d-e/f (中綴表示、代數式)

abcd-*+ef/- (字尾表示、逆波蘭式)

pascal程式設計,有關圖的遍歷

3樓:網友

在print那個過程裡,輸和物出的後面,end;的前面,如果用檔案就做手把檔案close掉純棚嫌,然後再打halt;(結束程式)就只會輸出一種了。

修改後如下:

procedure print;

var i:integer;

beginfound:=1;

for i:=1 to n-1 do write(b[i],'

writeln(b[n]);

halt;end;

pascal高手請進!樹得遍歷問題

4樓:網友

其實我不知道 你的題目想表達點什麼。

我是按從左往右從上到下輸入樹的。

type...ptreedata=^ttreedata;

..ttreedata=record

..data:integer;

..left,right:ptreedata;

..end;

.//前。procedure walktree1(tree:ptreedata);

begin..if(tree<>nil) then

..begin

..writeln(tree^.data);

..walktree(tree^.left);

..walktree(tree^.right);

..end;

end;.中。procedure walktree2(tree:ptreedata);

begin..if(tree<>nil) then

..begin

..walktree(tree^.left);

..writeln(tree^.data);

..walktree(tree^.right);

..end;

end;後。

procedure walktree(tree:ptreedata);

begin..if (tree <>nil) then

..begin

..walktree(tree^.left);

..walktree(tree^.right);

..writeln(tree^.data);

..end;

end;. tree:ptreedata);;

..begin

..if tree=nil then.

..begin

..read(x);

..if x=0 then exit;

..new(p);

..tree^.data:=x;

..tree^.left:=nil;tree^.right:=nil;

..build(tree^.left);

..build(tree^.right);

..end;

..end;.

begin..buildtree(t);

.treewalk1(t);

.treewalk2(t);

.treewalk3(t);

end;

跪求知道二叉樹的中序遍歷和後續遍歷求前序遍歷程式。必須是pascal的。好的程式一定給。跪求!

5樓:網友

程式:var

s1,s2:string;

procedure solve(s1,s2:string);

vark:integer;

beginif length(s2)=1 then write(s2)

else begin

k:=pos(s2[length(s2)],s1);

write(s1[k]);

if k>1 then solve(copy(s1,1,k-1),copy(s2,1,k-1));

if k1 then solve(copy(s1,1,k-1),copy(s2,1,k-1));如果左子樹存在就遞迴呼叫}

if kthensolve(copy(s1,k+1,length(s1)-k),copy(s2,k,length(s2)-k));如果存在右子樹遞迴呼叫}

end; solve(copy(s1,1,k-1),copy(s2,1,k-1))本句話的意思是,s1序列從第1個到第k-1個是左子樹,s2前面同樣的長度也是左子樹,所以,相當於把這個問題又分成了個新的和先一樣的問題,已知中序和後序,求先序,那不就是可以遞迴了,只不過長度改變了,變成原來的左子樹。

其實意思很簡單,就是每次都找到根輸出,然後遍歷左子樹,遍歷右子樹,然後對左子樹同樣,先輸出根,再訪問左子樹,右子樹,。。遞迴呼叫。

6樓:網友

我是法師你發那哥們好方法解套日記。

pascal語言中樹和森林的後根遍歷對應二叉樹的什麼遍歷

7樓:

樹和森林的後根遍歷對應其轉換成的二叉樹的中序遍歷。

pascal語言程式設計題求高手呀追加跪求進來看一看

答案不唯一,abc ab ac都是答案 vari1,i2,i3,j longint begin for i1 1 to 2 do for i2 1 to 2 do for i3 1 to 2 do if ord i1 1 ord i1 1 ord i3 2 and i2 2 2 then begin...

樹的後根遍歷序列等同於該樹對應的二叉樹的 BA 先序序列B 中序序列C 後序序列

blackpink 羅捷 中序序列。中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。若二叉樹為空則結束返回,否則 1 中序遍歷左子樹 2 訪問根結點 3 中序遍歷右子樹 如圖所示二叉樹,中序遍歷結果 dbeafcg 中序遍歷數學表示式形式 當對一棵數學表示式樹進行中序,前序和後序遍歷時,就分...

PASCAL簡單的題目,求答案

type ta array 1.10 of integer function arrmax arr ta n integer integer begin if n 1 then result arr 1 else result max arrmax arr,n 1 arr n end vara ta...