zoukankan      html  css  js  c++  java
  • 数据结构与算法面试题80道(16)

    16:

    题目(微软):

    输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 

    例如输入

     8

     / 

     6 10

    /  / 

    5 7 9 11

    输出8 6 10 5 7 9 11

    不想吐槽了,和上题简直一模一样。我是直接复制的上一题代码,将sawp函数直接换成了一个输出语句,就可以了

    说下思路,层次遍历,明显就是把8放进去,拿出来,然后把6,10放进去,把6拿出来,把5,7放进去,把10拿出来, 把9,11放进去,然后一个一个往外拿,边拿边输出值。明显就是队列。早知道上题用栈写了,好歹是不同的代码。

    贴代码了

    #include<iostream>
    #include<queue>
    using namespace std;
    
    struct BSTreeNode{
        int m_nValue;
        BSTreeNode *m_pLeft;
        BSTreeNode *m_pRight;
    };
    
    void addNode(BSTreeNode *&root,int value){
        if(root==NULL){
            BSTreeNode *tree=new BSTreeNode();
            if(tree==NULL) {cout<<"内存错误"<<endl;return ;}
            tree->m_nValue=value;
            tree->m_pLeft=NULL;
            tree->m_pRight=NULL;
            root=tree;
        }else if(root->m_nValue>value) addNode(root->m_pLeft,value);
        else if(root->m_nValue<value) addNode(root->m_pRight,value);
        else cout<<"结点重复"<<endl;
    }
    
    void loopTree(BSTreeNode *root){
        queue<BSTreeNode*>q;
        q.push(root);
    
        while(!q.empty()){
            BSTreeNode *t=q.front();
            q.pop();
            cout<<t->m_nValue<<" ";
            if(t->m_pLeft!=NULL) q.push(t->m_pLeft);
            if(t->m_pRight!=NULL) q.push(t->m_pRight);
        }
    }
    
    int main(){
        //建树
        BSTreeNode *root=NULL;
        addNode(root,8);
        addNode(root,6);
        addNode(root,10);
        addNode(root,5);
        addNode(root,7);
        addNode(root,9);
        addNode(root,11);
    
        loopTree(root);
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    javascript优化--10模式(设计模式)01
    javascript优化--09模式(代码复用)02
    限制字符个数显示
    title
    点选词高亮算法
    ng-repeat嵌套的$index
    console.log的问题
    outsideClick 功能,探索
    input 框的 placeholder 另类实现
    ie9 与 placeholder 问题
  • 原文地址:https://www.cnblogs.com/wabi87547568/p/5265484.html
Copyright © 2011-2022 走看看