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

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

一.深度优先遍历,此处以先序遍历(根左右)为例



    private Node * root;
    //递归
    public void travelRecursively( )const{
        travel_recursively( root );
        cout<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 local_nodes = new Stack ( );
        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;
    }
    //与迭代相比,递归在广度优先遍历上显得很拙劣

你可能感兴趣的:(markdown)