運用棧來實現二叉樹的前序遍歷
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 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...