这里主要是三种遍历,先序(preorder,NLR),中序(Inorder,LNR),后序(Postorder,LRN)

N:node,L:left,R:right

基本排序:先序(NLR,节点,左,右),中序(LNR,左,节点,右),后序(LRN,左,右,节点)

要点:在每一种排序里,必须遵守基本排序。看图:

为了更加直观的了解,看下面的c语言实现的代码,参考了:https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/

  1. #include<cstdio>
  2. #include<cstdlib>
  3. using namespace std;
  4. struct node{
  5. int data;
  6. struct node* left;
  7. struct node* right;
  8. };
  9. struct node* newNode(int data){
  10. struct node* node = (struct node*)malloc(sizeof(struct node));
  11. node->data=data;
  12. node->left=NULL;
  13. node->right=NULL;
  14. return node;
  15. }
  16. void printPostorder(struct node* node){
  17. if(node == NULL)
  18. return;
  19. printPostorder(node->left);
  20. printPostorder(node->right);
  21. printf("%d ",node->data);
  22. }
  23. void printInorder(struct node* node){
  24. if(node==NULL){
  25. return;
  26. }
  27. printInorder(node->left);
  28. printf("%d ",node->data);
  29. printInorder(node->right);
  30. }
  31. void printPreorder(struct node* node){
  32. if(node==NULL){
  33. return;
  34. }
  35. printf("%d ",node->data);
  36. printPreorder(node->left);
  37. printPreorder(node->right);
  38. }
  39. int main(){
  40. struct node *root=newNode();
  41. root->left=newNode();
  42. root->right=newNode();
  43. root->left->left=newNode();
  44. root->left->right=newNode();
  45. root->right->left=newNode();
  46. root->right->right=newNode();
  47. root->left->left->left=newNode();
  48. root->left->left->right=newNode();
  49. root->left->right->left=newNode();
  50. root->left->right->right=newNode();
  51. root->right->left->left=newNode();
  52. root->right->left->right=newNode();
  53. root->right->right->left=newNode();
  54. root->right->right->right=newNode();
  55. printf("\nPreorder raversal of binary tree is \n");
  56. printPreorder(root);
  57. printf("\nInorder raversal of binary tree is \n");
  58. printInorder(root);
  59. printf("\nPostorder raversal of binary tree is \n");
  60. printPostorder(root);
  61. return ;
  62. }

输出:

  1. Preorder raversal of binary tree is
  2.  
  3. Inorder raversal of binary tree is
  4.  
  5. Postorder raversal of binary tree is

写一个中序输出的图解:

二叉树遍历-c实现的更多相关文章

  1. C++ 二叉树遍历实现

    原文:http://blog.csdn.net/nuaazdh/article/details/7032226 //二叉树遍历 //作者:nuaazdh //时间:2011年12月1日 #includ ...

  2. python实现二叉树遍历算法

    说起二叉树的遍历,大学里讲的是递归算法,大多数人首先想到也是递归算法.但作为一个有理想有追求的程序员.也应该学学非递归算法实现二叉树遍历.二叉树的非递归算法需要用到辅助栈,算法着实巧妙,令人脑洞大开. ...

  3. 【二叉树遍历模版】前序遍历&&中序遍历&&后序遍历&&层次遍历&&Root->Right->Left遍历

    [二叉树遍历模版]前序遍历     1.递归实现 test.cpp: 12345678910111213141516171819202122232425262728293031323334353637 ...

  4. hdu 4605 线段树与二叉树遍历

    思路: 首先将所有的查询有一个vector保存起来.我们从1号点开始dfs这颗二叉树,用线段树记录到当前节点时,走左节点的有多少比要查询该节点的X值小的,有多少大的, 同样要记录走右节点的有多少比X小 ...

  5. poj2255 (二叉树遍历)

    poj2255 二叉树遍历 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descripti ...

  6. D - 二叉树遍历(推荐)

    二叉树遍历问题 Description   Tree Recovery Little Valentine liked playing with binary trees very much. Her ...

  7. 二叉树遍历 C#

    二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并 ...

  8. 二叉树——遍历篇(递归/非递归,C++)

    二叉树--遍历篇 二叉树很多算法题都与其遍历相关,笔者经过大量学习.思考,整理总结写下二叉树的遍历篇,涵盖递归和非递归实现. 1.二叉树数据结构及访问函数 #include <stdio.h&g ...

  9. 二叉树遍历(flist)(二叉树,已知中序层序,求先序)

    问题 C: 二叉树遍历(flist) 时间限制: 1 Sec  内存限制: 128 MB提交: 76  解决: 53[提交][状态][讨论版][命题人:quanxing][Edit] [TestDat ...

  10. 二叉树遍历(flist)(已知中序和按层遍历,求先序 )

    问题 F: 二叉树遍历(flist) 时间限制: 1 Sec  内存限制: 128 MB提交: 11  解决: 9[提交][状态][讨论版][命题人:quanxing][Edit] [TestData ...

随机推荐

  1. shell 脚本使用记录

    2019-03-26 需求是:因为遇到一些测试偶发性的出现,比如执行了20次会出一次错误,然后就顺手写了一个小脚本,用来判断执行了 n 次,是否出现错误.根据正则来匹配出substring value ...

  2. linux学习笔记 yum 在线管理软件包

    -y  如果yum在工作过程中需要使用者响应.这个参数可以直接回答yes #yum list 列出资源库中所有可安装或者可更新的rpm包 #yum perl 列出为perl的包 #yum perl* ...

  3. C#Workbooks 对象的 Open 方法参数说明

    打开一个工作簿. excelApp.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword,IgnoreRea ...

  4. Shell脚本笔记(五)Shell函数

    Shell函数 1.定义语法 标准写法: funciton funName () { order....... return n } 简化写法1: funciton funName { order.. ...

  5. Cesium Up and Running Error: Cannot find module 'express'

    在node server.js之前需要npm install,如下: npm install -d

  6. C Windows控制台字符版本俄罗斯方块

    //一个可以工作在Windows控制台字符界面下的俄罗斯方块 //工作在非图形模式,无需其他库依赖,单个C文件代码即可运行 //支持最高纪录,并且对于纪录进行了加密 //By wrule 2015年1 ...

  7. Jupyter Notebook 快捷键和技巧

    Jupyter Notebook 有两种键盘输入模式. 编辑模式,允许你往单元中键入代码或文本,这时的单元框线是绿色的. 命令模式,键盘输入运行程序命令:这时的单元框线是蓝色.       命令模式 ...

  8. Flask-WTF表单的使用

    使用flask的WTF表单 #! /usr/bin/env python # *-* coding: utf-8 *-* from flask import Flask, render_templat ...

  9. Linux命令之vi篇

    作业二: 1)  使用vi编辑器编辑文件/1.txt进入编辑模式写入内容“hello world” [root@localhost ~]# vi 1.txt 2)  进入命令行模式复制改行内容,在下方 ...

  10. MUI学习03-滚动图(幻灯片)及菜单项(九宫格)

    <!--标准mui.css-->引入CSS:<link rel="stylesheet" href="../css/mui.min.css"& ...