二叉树的遍历(递归与非递归)
来源:互联网 发布:30岁男士护肤 知乎 编辑:程序博客网 时间:2024/05/22 18:24
前序遍历:
操作顺序为:父节点 -> 左儿子 -> 右儿子
递归版本
struct node{ int data; struct node * left; struct node * right;};void preOrder(node *root){ if(root != NULL) { cout<<root->data<<" "; preOrder(root->left); preOrder(root->right); }}
非递归版本
void preOrderStack(node *root){ stack<node *> s; while(root != NULL || !s.empty()) { if(root != NULL) { cout<<root->data<<" "; s.push(root); root = root->left; } else { root = s.top(); s.pop(); root = root->right; } }}
中序遍历:
操作顺序为:左儿子 -> 父节点 -> 右儿子
递归版本
void midOrder(node *root){ if(root != NULL) { midOrder(root->left); cout<<root->data<<" "; midOrder(root->right); }}
非递归版本
void midOrderStack(node *root){ stack<node *> s; while(root != NULL || !s.empty()) { if(root != NULL) { s.push(root); root = root->left; } else { root = s.top(); s.pop(); cout<<root->data<<" "; root = root->right; } }}
后序遍历:
操作顺序为:左儿子 -> 右儿子 -> 父节点
递归版本
void postOrder(node *root){ if(root != NULL) { postOrder(root->left); postOrder(root->right); cout<<root->data<<" "; }}
非递归版本
void postOrderStack(node *root){ stack<node *> s; node *cur; node *pre = NULL; s.push(root); while(!s.empty()) { cur = s.top(); if((cur->left == NULL && cur->right == NULL) || (pre != NULL && (cur->left == pre || cur->right == pre))) { cout<<cur->data<<" "; pre = cur; s.pop(); } else { if(cur->right != NULL) s.push(cur->right); if(cur->left != NULL) s.push(cur->left); } }}
0 0
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历算法(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 【数据结构】二叉树的遍历(递归与非递归)
- 二叉树的遍历(递归与非递归)
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- Android 用户界面---样式和主题(Styles and Themes)(一)
- pc端得到微博地址的第二种方法
- Linux下Bluetooth socket编程 (Bluetooth与Socket)
- 讨论printf和cout的参数调用顺序
- Android 用户界面---样式和主题(Styles and Themes)(二)
- 二叉树的遍历(递归与非递归)
- IOS开发中UITableView和UITableViewCell的几种样式
- 修改UITextfield的Placeholder字体的颜色
- 头脑风暴之面试——做个程序员,我容易吗?
- ZOJ 3822 Domination (概率DP)
- 字典树(Trie tree)
- android开发步步为营之52:AsyncTask处理过程中自定义旋转的菊花
- python用httplib模块发送get和post请求
- GCD延迟