• 倍道而行:二分搜索树的遍历【前中后序遍历(深度优先遍历)】+层序遍历【广度优先遍历】


    先看下前中后序遍历的顺序是怎么样的:


    下面通过一个例子来具体的描述前序遍历的流程:

    以下都以“节点”代替,比如:“28”指的是 “28这个节点”。

    流程顺序是:自、左、右

    • 1.先访问“28”,然后访问“28”左节点即“16”。
    • 2.然后“16”的左节点即“13”。好,这里是关键,“13”没继续访问其左节点,发现没有左节点,然后就访问自己,然后再访问其右节点。
    • 3.开始回溯,访问“16”,再访问“16”的右节点“22”,“22”的左右都没有,回到“16”,再到“28”,在访问“28”的左节点
    • 4.继续以上流程。

     下面画个图来表示顺序:

    下面是代码实现:

     // 对以node为根的二叉搜索树进行前序遍历
        void preOrder(Node* node){
    
            if( node != NULL ){
                cout<<node->key<<endl;
                preOrder(node->left);
                preOrder(node->right);
            }
        }

      这属于深度遍历的方法,一下走到最下面“13”节点。

    下面给出中序和后续的代码:

     // 对以node为根的二叉搜索树进行中序遍历
        void inOrder(Node* node){
    
            if( node != NULL ){
                inOrder(node->left);
                cout<<node->key<<endl;
                inOrder(node->right);
            }
        }
    
        // 对以node为根的二叉搜索树进行后序遍历
        void postOrder(Node* node){
    
            if( node != NULL ){
                postOrder(node->left);
                postOrder(node->right);
                cout<<node->key<<endl;
            }
        }

    代码的是不是很像,但是打印的顺序是不一样的。 


    层序遍历【广度优先遍历】 :

    层序遍历就是:一层层的来,从28-16-30-13-22-29-42,这样的顺序。

    这里需要用到队列,如图:

    大致流程:

    • 28入队,然后出队【就是进行处理】然后起左右两节点入队,即16和30.
    • 然后16出队【进行处理】,然后16的左右子节点入队,即13和22.
    • 然后30出队【进行处理】,然后30的左右子节点入队,即29和42.
    • 然后在13出队【进行处理】,然后13的左右子节点入队,但是木有
    • 继续22出队【进行处理】,然后22的左右子节点入队,但是木有
    • ......

    代码:

     // 层序遍历
        void levelOrder(){
    
            queue<Node*> q;
            q.push(root);
            while( !q.empty() ){
    
                Node *node = q.front();
                q.pop();
    
                cout<<node->key<<endl;
    
                if( node->left )
                    q.push( node->left );
                if( node->right )
                    q.push( node->right );
            }
        }
    但行好事,莫问前程。
  • 相关阅读:
    [附件解决方案]CruiseControl.NET 超冷门”BUG” 关键字:VstsHistoryParser ParseChangeSet CheckForModifications FormatException
    SQL SERVER 2008 函数大全 字符串函数
    第五章 DOM接口 DOM Interfaces
    [MSSQL]FOR XML AUTO I
    DOS CHOICE命令
    [MSSQL]NTILE另类分页有么有?!
    原生态webglDEMO,以后可能选择Three.JS来代替了,代码网上找的,参考引用
    [MSSQL]COALESCE与ISNULL函数
    【转】“无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域”错误提示的解决
    【转】一个项目涉及到的50个Sql语句(整理版)
  • 原文地址:https://www.cnblogs.com/yuhui-snail/p/8600904.html
Copyright © 2020-2023  润新知