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

(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;
    }
    //与迭代相比,递归在广度优先遍历上显得很拙劣
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值