树代码
Posted 伙上伴冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树代码相关的知识,希望对你有一定的参考价值。
#include <iostream>#include <stack>
using namespace std;
//定义树的节点类型
typedef struct Node
int data;
struct Node * lchild;
struct Node * rchild;
tree;
//定义栈存储节点类型
typedef struct SNode
tree * node;
bool isFirst;
SNode;
//创建树
void CreateTree(tree * &node)
int data;
cin>>data;
if(data==-1)
node=NULL;
else
node=new tree;
node->data=data;
node->lchild=NULL;
node->rchild=NULL;
CreateTree(node->lchild);
CreateTree(node->rchild);
//递归实现树的前序遍历
void PreViewTree(tree *node)
if(node!=NULL)
cout<<node->data<<"\\t";
PreViewTree(node->lchild);
PreViewTree(node->rchild);
//递归实现树的中序遍历
void MidViewTree(tree *node)
if(node!=NULL)
MidViewTree(node->lchild);
cout<<node->data<<"\\t";
MidViewTree(node->rchild);
//递归实现数的后序遍历
void LasViewTree(tree *node)
if(node!=NULL)
LasViewTree(node->lchild);
LasViewTree(node->rchild);
cout<<node->data<<"\\t";
//实现非递归树的前序遍历
void PreViewStackTree(tree* node)
stack<tree*> s1;//push pop top empty
while(node!=NULL || !s1.empty())
while(node!=NULL)
cout<<node->data<<"\\t";
s1.push(node);
node=node->lchild;
if(!s1.empty())
node=s1.top();
s1.pop();
node=node->rchild;
//实现树非递归的中序遍历
void MideViewStackTree(tree * node)
stack<tree*> s1;//push pop top empty
while(node!=NULL ||!s1.empty())
while(node!=NULL)
s1.push(node);
node=node->lchild;
if(!s1.empty())
node=s1.top();
s1.pop();
cout<<node->data<<"\\t";
node=node->rchild;
//实现树的非递归后续遍历
void LastViewStackTree(tree* node)
stack<SNode*> s1;
SNode *stnode;
while(node!=NULL || !s1.empty())
while(node!=NULL)
stnode=new SNode;
stnode->node=node;
stnode->isFirst=true;
s1.push(stnode);
node=node->lchild;
if(!s1.empty())
stnode=s1.top();
s1.pop();
if(stnode->isFirst)
stnode->isFirst=false;
s1.push(stnode);
node=stnode->node->rchild;
else
cout<<stnode->node->data<<"\\t";
node=NULL;
int main(int argc, char *argv[])
tree *node;
CreateTree(node);
PreViewTree(node);
cout<<endl;
MidViewTree(node);
cout<<endl;
LasViewTree(node);
cout<<endl;
PreViewStackTree(node);
cout<<endl;
LastViewStackTree(node);
cout<<endl;
return 0;
以上是关于树代码的主要内容,如果未能解决你的问题,请参考以下文章