zoukankan      html  css  js  c++  java
  • 常见算法之1---先序遍历二叉树

    前序遍历:先遍历父节点,然后左子节点,然后右子节点。

    下图的遍历顺序为:1245367

      

    递归方式遍历:

    基本思想:对一个树的访问,可以分成访问当前节点,访问左子树和访问右子树。而访问左右子树时又可以看做是上述步骤的重复,因此可以递归的调用。

    代码流程:

    void preOrder(TNode* root){
        if (root != NULL){
                     Visit(root);           //访问当前节点
                     preOrder(root->left);   //递归访问左子节点
                     preOrder(root->right);   //递归访问右子节点
                 }
             }

    非递归方式遍历:

    基本思想:在访问途中将依次遇到的节点保存下来。由于节点出现次序与恢复次序是反序的,因此是一个先进后出结构,需要用栈。

    代码流程:

    void preOrder1(TNode* root){
        Stack S;
        while ((root != NULL) ||!S.empty()) {
            if (root != NULL) {
                Visit(root);
                S.push(root);       // 先访问,再入栈
                root = root->left;    // 依次访问左子树
            }
            else{
                root = S.pop();     // 回溯至父亲节点
                root = root->right;
            }
        }
    }
    
     

    注:将代码和开始时的附图一起看,能更好的理解。

  • 相关阅读:
    logging模块
    configparser模块
    hashlib模块
    shutil模块
    json与pickle模块
    random模块
    OS模块
    如何不使用共享内存实现windows与虚拟机中进行文件的传输
    结构体的定义方式(仅定义)
    数据结构练习之寻找顺序表中的主要元素
  • 原文地址:https://www.cnblogs.com/xiaoChongUp/p/3239284.html
Copyright © 2011-2022 走看看