(c++)二叉树的广度优先遍历和深度优先遍历
一.深度优先遍历,此处以先序遍历(根左右)为例
private Node * root;
public void travelRecursively( )const{
travel_recursively( root );
cout<<endl;
}
private void travel_recursively( const Node* &root) const {
if(root == null)
return ;
cout << root-> data << " ";
travel_recursively( root -> left );
travel_recursively( root -> right );
}
public void travel_Iteratively( ){
Node local_root = root;
Stack<Node*> local_nodes = new Stack<Node*> ( );
local_nodes.push ( local_root );
while( true ){
if( local_nodes.empty( ) )
break;
local_root = local_nodes.top( );
if( local_root != null ){
cout << local_root-> data << " " ;
local_nodes.push ( local_root-> right );
local_nodes.push ( local_root-> left );
}
local_nodes.pop ( );
}
cout << endl;
}
二.广度优先遍历,以先序遍历(根左右)为例
private Node* root;
public void travelIteratively(){
Node * local_root=root;
Queque< Node* > local_nodes = new Queque< Node* > ( );
local_nodes.push(local_root);
while(true){
if(local_nodes.empty())
break;
local_root=local_nodes.top();
if(local_root!=null){
cout<<local_root->data<<" ";
local_nodes.push(local_root->left);
local_nodes.push(local_root->right);
}
local_nodes.pop();
}
cout<<endl;
}