树代码

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;

以上是关于树代码的主要内容,如果未能解决你的问题,请参考以下文章

数据结构二叉树经典基础习题

编程算法 - 推断二叉树是不是平衡树 代码(C)

树--07---二叉树--04--平衡二叉树(AVL树)

Python:树结构和数字代码?

树结构的基础部分

树-概念性总结及代码示例