二叉樹非遞迴(迭代)方法遍歷

2021-09-26 23:03:32 字數 1070 閱讀 5709

運用棧來實現二叉樹的前序遍歷

while(棧不為空或結點不為空)

出棧的順序和中序遍歷的結果相同

void

preorder

(node*root)

}void

preorder2

(node*root)

}void

preorder3

(node*root)

cur = s.

top(

)->right;

s.pop();

}}

同前序遍歷一樣 但是按出棧順序列印

void

inorder

(node*root)

}void

inorder2

(node*root)

cur = s.

top();

cout << cur->data <<

" ";

s.pop();

cur = cur->right;

}}

與前序遍歷和中序遍歷有所不同 當返回到根結點時 需要判斷是從左子樹返回到根節點還是從右子樹返回到根結點

若是從左子樹返回到根不列印根結點 從右子樹返回到根列印根結點。

用last來記錄上乙個棧頂的結點

void

posorder

(node*root)

}void

posorder2

(node*root)

while

(!q.

empty()

)return;}

void

posorder3

(node*root)

top= s.

top();

//這一定用乙個引得指標來接受不能用cur來接受

//cur不能改變if(

!top->right||top->right==last)

else

cur = top->right;

}}

非遞迴方法遍歷二叉樹

思路 前序遍歷由圖示是先一里路向左全遞迴壓棧並且邊壓棧邊列印,直到左指標為空,然後得到棧頂指標,並出棧,找該棧頂結點的右結點,如果不為空,同樣的一路左遞迴壓棧,邊壓棧邊列印,直到左指標為空,然後重複,最後棧為空停止。借用棧實現回到前乙個結點 非遞迴遍歷 void btreeprevordernonr...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...