travel the binary tree by level 3 ( from down to top and from right to left every level )

travel the binary tree by level 3 ( from down to top )

个人信息:就读于燕大本科软件project专业 眼下大三;

本人博客:google搜索“cqs_2012”就可以;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

博客内容:travel the binary tree by level 3 ( from down to top )

博客时间:2014-5-3;

编程语言:C++ ;

编程坏境:Windows 7 专业版 x64;

编程工具:vs2008 32位编译器;

制图工具:office 2010 ppt;

硬件信息:7G-3 笔记本;


my words

I think paper and pen is better than computer. 

problem

travel the binary tree by level 3 ( from down to top and from left to right ) and class it  by level

eg: the binary tree follows


travelling result follows:

 

my solution

travel the binary tree by level( from down to top and from right to left ), and class it by level.

tool with queue and stack, travel the tree by queue and visit it by stack.


void _TravelByLevel(node * T)
{
	queue<node *> Q;
	stack<node *> S;
	cout<<"travel start"<<endl;
	if(T != NULL)
	{
		Q.push(T);
		Q.push(NULL);
		node * p;

		while(! Q.empty())
		{

			// first action
			p = Q.front();
			Q.pop();
			//_Visit(p);
			S.push(p);

			// second action
			if(p->left != NULL)
				Q.push(p->left);
			if(p->right != NULL)
				Q.push(p->right);

			// third action
			if(Q.front() == NULL)
			{
				Q.pop();
				if(Q.empty())
					break;
				S.push(NULL);
				Q.push(NULL);
				//cout<<"level"<<endl;
			}
		}

		while(! S.empty())
		{
			if(S.top() != NULL)
				_Visit(S.top());
			else cout<<"level"<<endl;
			S.pop();
		}
	}
	cout<<"travel over"<<endl;
	
}

my code

test.cpp

#include<iostream>
#include<queue>
#include<stack>
using namespace std;



class node
{
public:
    int data ;
    node * left ;
    node * right ;
    node()
	{
        data = 0 ;
        left = right = NULL ;
    }
};


void _MakeTree(node * &T,int *data,int length);
void _Insert(node * & T,int data);
void _Visit(node * T);
void _TravelByLevel(node * T);

void _MakeTree(node * &T,int *data,int length)
{
    for(int i=0;i<length;i++)
    {
		_Insert(T,data[i]);
    }   
}


void _Insert(node * & T,int data)
{
    if(T == NULL)
    {
		T = new node();
		T -> data = data;
    }
    else
    {
		node * p = T;
		while(p != NULL)
		{
			if(data == p->data )
			break;
			else if(data < p->data )
			{
				if(p->left != NULL)
				{
					p = p ->left;
				}
				else{
					p->left = new node();
					(p->left) ->data = data;
					break;
				}
			}
			else{
				if(p->right != NULL)
					p = p->right;
				else{
					p->right = new node() ;
					(p->right) ->data = data ;
					break ;
				}
			}
		}
    }
}

void _TravelByLevel(node * T)
{
	queue<node *> Q;
	stack<node *> S;
	cout<<"travel start"<<endl;
	if(T != NULL)
	{
		Q.push(T);
		Q.push(NULL);
		node * p;

		while(! Q.empty())
		{

			// first action
			p = Q.front();
			Q.pop();
			//_Visit(p);
			S.push(p);

			// second action
			if(p->left != NULL)
				Q.push(p->left);
			if(p->right != NULL)
				Q.push(p->right);

			// third action
			if(Q.front() == NULL)
			{
				Q.pop();
				if(Q.empty())
					break;
				S.push(NULL);
				Q.push(NULL);
				//cout<<"level"<<endl;
			}
		}

		while(! S.empty())
		{
			if(S.top() != NULL)
				_Visit(S.top());
			else cout<<"level"<<endl;
			S.pop();
		}
	}
	cout<<"travel over"<<endl;
	
}

void _Visit(node * T)
{
	if(T != NULL)
		cout<<T->data<<endl;
	else cout<<"visit NULL"<<endl;
}

int main()
{
    int data[] = {8,6,3,7,2,1,13,12,15,17};

    node * T = NULL;
    _MakeTree(T,data,10);
	_TravelByLevel(T);
    system("pause");
    return 0;
}


posted on 2017-06-27 09:27  ljbguanli  阅读(149)  评论(0编辑  收藏  举报