非递归实现树的遍历
来源:互联网 发布:cef chromium linux 编辑:程序博客网 时间:2024/06/05 11:27
【代码】
#include <iostream>#include <stack>using namespace std;typedef struct Node{char key;struct Node *lchild, *rchild;}*Tree, TNode;void PreOrder(Tree T) //先序遍历{if (T == NULL)return;TNode *curr = T;//TNode *tmp;stack<Tree> s;while (curr != NULL || !s.empty()) {if (curr != NULL) {cout<<curr->key;s.push(curr);curr = curr->lchild;}else {curr = s.top();s.pop();curr = curr->rchild;}}/*while (curr != NULL) {cout<<curr->key;s.push(curr);curr = curr->lchild;}while(!s.empty()) {curr = s.top();s.pop();tmp = curr->rchild;while(tmp != NULL) {cout<<tmp->key;s.push(tmp);tmp = tmp->lchild;}}*/}void InOrder(Tree T) //中序遍历{if (T == NULL)return;TNode *curr = T;//TNode *tmp;stack<Tree> s;while ((curr != NULL) || !s.empty()) {if (curr != NULL) {s.push(curr);curr = curr->lchild;}else {curr = s.top();cout<<curr->key;s.pop();curr = curr->rchild;}}}void PostOrder(Tree T) //后序遍历{if (T == NULL)return ;TNode *curr = T, *pre = NULL;stack<Tree> s;while (curr != NULL || !s.empty()) {if (curr != NULL) {s.push(curr);curr = curr->lchild;}else {curr = s.top();s.pop();if (curr->rchild != NULL && curr->rchild != pre) {s.push(curr);curr = curr->rchild;}else {cout<<curr->key;pre = curr;curr = NULL;}}}}Tree createTree(char *s, int n, int i) //建树{if (i >= n)return NULL;TNode *curr;curr = (TNode *)malloc(sizeof(TNode));curr->key = s[i];curr->lchild = createTree(s, n, 2*(i+1)-1);curr->rchild = createTree(s, n, 2*(i+1));return curr;}void freeTree(Tree T) //释放{if (T != NULL){freeTree(T->lchild);freeTree(T->rchild);delete T;}}int main(void){char s[] = "ABCDEFG";Tree T;T = createTree(s, 7, 0);InOrder(T);cout<<endl;PreOrder(T);cout<<endl;PostOrder(T);cout<<endl;freeTree(T);return 0;}
0 0
- 递归非递归实现树的遍历
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 树的遍历 非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- 非递归实现树的遍历
- 二叉树遍历的非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 非递归遍历二叉树的实现
- 二叉树遍历的非递归实现
- 树的遍历(非递归实现)
- 二叉树遍历的非递归实现
- 二叉树的遍历(递归实现+非递归实现)
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
- iOS8下注册push方式变更
- Boost智能指针—shared_ptr(转载,收藏)
- NGUI 3.6.0以上版本 的研究一 : 新增的prefab
- BZOJ 1040 ZJOI 2008 骑士 基环树林+树形DP
- 非递归实现树的遍历
- Android 根据sql文件创建数据库并插入数据
- c++引用与指针的区别(着重理解)
- 【Unity3D自学记录】Shader基础
- The Swift Programming Language中文完整版
- 最近在使用string类时出现了一个问题,string *p=(string *)malloc(sizeof(string)*10);
- Codeforces Round #271 (Div. 2) 解题报告
- 【Unity3D自学记录】进击的Shader
- sas快捷键大全