您的位置:首页 > 其它

二叉树遍历算法(递归实现先序中序和后续遍历)(非递归实现中序和先续)

2017-09-07 23:32 337 查看

二叉树遍历

这两天抓紧把二叉树遍历复习了一遍,递归实现还是一如既往地简洁,迭代版本写了好久还是只实现了先序和中序,后续一直没搞明白,有空了再更新。

递归实现

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐