1. 程式人生 > >樹的遍歷

樹的遍歷

postorder build pac cpp temp true blog rebuild ()

#include<iostream>
#include<memory.h> 
#include<cstring>
#include<queue>
using namespace std;
char* res[26];
struct Node
{
        Node* left;
        Node* right;
        char num;
        Node() { }; 
        Node(char c, Node* l = NULL, Node* r = NULL) 
        {
        	num=c;
        	left=l;
        	right=r;
		}
};

Node* rebuild(char* pr,char* in,int len)
{
   int i;
   Node* temp=new Node(*pr);
   if(len<=0)
        return NULL;
   //cout<<*pr;
   for(i=0;i<len;i++)
   {
           if(*pr==in[i])
           break;
   }
   temp->left=rebuild(pr+1,in,i);
   temp->right=rebuild(pr+i+1,in+i+1,len-i-1);
   return temp;
}
void PreOrder(Node* root)
{
	if(root)
	{
	cout<<root->num;
	PreOrder(root->left);
	PreOrder(root->right); 
    }
 } 
 void InOrder(Node* root)
 {
 	if(root)
 	{
 		InOrder(root->left);
		cout<<root->num;
 		InOrder(root->right);
 	
	 }
 }
 void PostOrder(Node* root)
 {
 	if(root)
 	{	
 		PostOrder(root->left);
 		PostOrder(root->right);
 		cout<<root->num;
	 }
 }
 void LevelOrder(Node* root)
 {
 	queue<Node*> q;
 	if(root!=NULL)
 	q.push(root);
 	Node* temp;
 	while(!q.empty())
 	{
 		temp=q.front();
 		cout<<temp->num;
 		q.pop();
 		if(temp->left!=NULL)
 		q.push(temp->left);
 		if(temp->right!=NULL)
 		q.push(temp->right);
	 }
 }
int main()
{
 char pr[26];    
 char in[26];
 cin>>pr;
 cin>>in;
 int len=strlen(pr);
 //cout<<len;
        //int len=cal(pr);
        //len=a.length();
        Node* root=rebuild(pr,in,len);
        //PreOrder(root);
        //cout<<endl;
        //InOrder(root);
        //cout<<endl;
        //PostOrder(root);
        //cout<<endl;
        LevelOrder(root);
        cout<<endl;
        return 0;
}

  

樹的遍歷