非递归方法,二叉树的中序遍历
2015-10-25 10:52
381 查看
#include<iostream> #include<stack> #include<vector> #include<string> using namespace std; typedef struct Bintree* tree;//tree是指向结构体的指针 struct Bintree { char c; tree lchild,rchild; }; tree creat(tree root) { char ch; ch=getchar(); if(ch=='#') root=NULL; else { root=(tree)malloc(sizeof(struct Bintree)); root->c=ch; root->lchild=creat(root->lchild); root->rchild=creat(root->rchild); } return root; } void InTravsal(tree tree1)//二叉树的中序遍历 { if(tree1!=NULL) { InTravsal(tree1->lchild); cout<<tree1->c; InTravsal(tree1->rchild); } } int main() { tree root1;//根节点 root1=(tree)malloc(sizeof(struct Bintree)); root1=creat(root1); stack<tree>sta; tree test1,test; test=root1; while(test) { sta.push(test);//将根节点F压入栈 test1=test->lchild;//test1指向左子树根节点的指针,即为空 if(test1==NULL)//如果左子树根节点为空,即没有左子树 { if(test!=NULL)//指向该节点的指针不为空,即F不为空 cout<<test->c<<endl;//输出该节点的字符,即输出F sta.pop();//将该节点弹出,将F节点弹出 if(test->rchild==NULL)//判断该节点的右子树根节点是不是空,如果是空,F的右子树为空 { if(sta.size()!=0)//判断此时栈的大小,如果不等于零 { cout<<sta.top()->c<<endl;//输出该节点的字符,输出D if(sta.top()->rchild!=NULL)//D的右子树不为为空 { test=sta.top()->rchild; sta.pop(); } else//D的右子树为空 { sta.pop();//D弹出 cout<<sta.top()->c<<endl; test=sta.top()->rchild; sta.pop(); } } else { test=NULL; } } else test=test->rchild; } else test=test->lchild; } }
相关文章推荐
- VirtualBox-Error In supR3HardenedWinReSpawn解决办法
- 洛谷2656 采蘑菇
- centos简介与VMware安装
- java 获取当前时间及年月日时分秒
- IO 复习笔记
- poj Corporate Identity 3450 (KMP&&枚举) 好题
- 第一次机房收费系统之导出到Excel
- 《javascript语言精粹》读书笔记 Item2 对象
- View动画另一些使用场景--LayoutAnimation和Activity之间的切换效果
- 【UER #4】被删除的黑白树
- swift学习——点点滴滴——5~打印遍历显示optional
- 《javascript语言精粹》读书笔记 Item2 对象
- 金融英语词汇整理
- 腾讯的一个移动端测试小工具GT
- 数据结构实践项目——树和二叉树(1)
- bzoj3391: [Usaco2004 Dec]Tree Cutting网络破坏
- 1、web应用安全
- 欢迎使用CSDN-markdown编辑器
- UVa 10655 - Contemplation! Algebra
- 二、计算机程序