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

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


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

    以下都以“节点”代替,比如:“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 );
            }
        }
    但行好事,莫问前程。
  • 相关阅读:
    html5---音频视频基础一
    SQL--数据库性能优化详解
    微信--入门开发
    MVC----基础
    jquery -----简单分页
    sql优化
    集合的总结
    java并发编程与高并发解决方案
    java中boolean类型占几个字节
    正则表达式小结
  • 原文地址:https://www.cnblogs.com/yuhui-snail/p/8600904.html
Copyright © 2011-2022 走看看