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...