zoukankan      html  css  js  c++  java
  • 树的遍历

    树的遍历有3种:先根遍历、中根遍历、后根遍历;

    先根遍历:如果该二叉树为空树,则空操作,否则先访问根结点,再先根遍历左子树,最后先根遍历右子树。

    1 //该二叉树用二叉链表存储,结点类型BiTreeNode
    2 void pre_oder(BiTreeNode *root){
    3     if(root!=NULL){
    4         cout << root->data;//访问结点(这里是输出结点信息)
    5         pre_oder(root->leftchild);//先根遍历左子树
    6         pre_oder(root->rightchild);//先根遍历右子树
    7     }
    8 }

    中根遍历:如果该二叉树为空树,则空操作,否则先中根遍历左子树,再访问根结点,最后中根遍历右子树。

     //该二叉树用二叉链表存储,结点类型BiTreeNode
     void in_oder(BiTreeNode *root){
         if(root!=NULL){
             in_oder(root->leftchild);//中根遍历左子树
             cout << root->data;//访问结点(这里是输出结点信息)
             in_oder(root->rightchild);//中根遍历右子树
         }
     }

    后根遍历:如果该二叉树为空树,则空操作,否则先后根遍历左子树,再后根遍历右子树,最后访问根结点。

    1  //该二叉树用二叉链表存储,结点类型BiTreeNode
    2  void back_oder(BiTreeNode *root){
    3      if(root!=NULL){
    4          back_oder(root->leftchild);//后根遍历左子树
    5          back_oder(root->rightchild);//后根遍历右子树
    6          cout << root->data;//访问结点(这里是输出结点信息)
    7      }
    8  }

    如果把cout << root->data语句抹去,这三种算法是完全相同的,只是访问结点的时机不同。

    每次访问某子树时,都要先经过子树的根,访问完该子树的左子树后又会路过该子树的根,访问完右子树后还会路过根。所以每个节点都会被路过三次。

    如果在第一次路过时访问,就是先根遍历,如果是第二次,就是中根遍历,最后一次则是后根遍历。

  • 相关阅读:
    mysql 中将汉字(中文)按照拼音首字母排序
    数据库连接客户端 dbeaver 程序包以及使用说明
    maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
    iPadOS 更新日志
    iOS 更新日志
    mybatis 中 if else 用法
    Chrome 地址栏如何设置显示 http/https 和 www
    Windows 常用工具 & 开发工具 & Chrome插件 & Firefox 插件 & 办公软件
    elasticsearch安装ik分词器
    js关闭浏览器
  • 原文地址:https://www.cnblogs.com/eason66-blog/p/tree_walk.html
Copyright © 2011-2022 走看看