二叉樹遍歷演算法(遞迴實現先序中序和後續遍歷)(非遞迴實現中序和先續)
阿新 • • 發佈:2019-01-02
二叉樹遍歷
這兩天抓緊把二叉樹遍歷複習了一遍,遞迴實現還是一如既往地簡潔,迭代版本寫了好久還是隻實現了先序和中序,後續一直沒搞明白,有空了再更新。
遞迴實現
void RecursionBackTree(TreeNode * root) {
if (root) {
//先續遍歷
//cout << root->val << " ";
RecursionBackTree(root->left);
//中續遍歷
//cout << root->val << " ";
RecursionBackTree(root->right);
//後續遍歷
cout << root->val << " ";
}
}
迭代版本
先序遍歷
//Preorder
void IterateFirstTraverse(TreeNode* root) {
if (!root) return;
stack<TreeNode*> st;
while (true) {
while (root) {
cout << root->val<<" ";
st.push(root->right);
root = root->left;
}
if (!st.empty()) {
root = st.top();
st.pop();
}
else {
break;
}
}
cout << endl;
}
中序遍歷
void IterateTraverse(TreeNode* root) {
if (!root) return;
stack<TreeNode* > st;
//st.push(root);
//root = root->left;
while (true) {
while (root) { st.push(root); root = root->left; }
if (st.empty()) break;
root = st.top();
st.pop();
cout << root->val<<" ";
root = root->right;
}
cout << endl;
}