您的位置:首页 > 编程语言 > C语言/C++

(c++)二叉树的广度优先遍历和深度优先遍历

2018-04-03 20:36 330 查看

(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;
}
//与迭代相比,递归在广度优先遍历上显得很拙劣
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 二叉树 遍历
相关文章推荐