二叉树链式存储中的四种遍历方法

  1. void InorderTraversal( BinTree BT )
  2. {
  3. if( BT ) {
  4. InorderTraversal( BT->Left );
  5. /* 此处假设对BT结点的访问就是打印数据 */
  6. printf("%d ", BT->Data); /* 假设数据为整型 */
  7. InorderTraversal( BT->Right );
  8. }
  9. }
  10. void PreorderTraversal( BinTree BT )
  11. {
  12. if( BT ) {
  13. printf("%d ", BT->Data );
  14. PreorderTraversal( BT->Left );
  15. PreorderTraversal( BT->Right );
  16. }
  17. }
  18. void PostorderTraversal( BinTree BT )
  19. {
  20. if( BT ) {
  21. PostorderTraversal( BT->Left );
  22. PostorderTraversal( BT->Right );
  23. printf("%d ", BT->Data);
  24. }
  25. }
  26. void LevelorderTraversal ( BinTree BT )
  27. {
  28. Queue Q;
  29. BinTree T;
  30. if ( !BT ) return; /* 若是空树则直接返回 */
  31. Q = CreatQueue(); /* 创建空队列Q */
  32. AddQ( Q, BT );
  33. while ( !IsEmpty(Q) ) {
  34. T = DeleteQ( Q );
  35. printf("%d ", T->Data); /* 访问取出队列的结点 */
  36. if ( T->Left )   AddQ( Q, T->Left );
  37. if ( T->Right )  AddQ( Q, T->Right );
  38. }
  39. }

原文地址:https://www.cnblogs.com/lzdxh027/p/11323534.html

时间: 2024-10-10 00:39:37

二叉树链式存储中的四种遍历方法的相关文章

二叉树链式存储结构

二叉链表的C语言描述 基本运算的算法--建立二叉链表.先序遍历二叉树.中序遍历二叉树.后序遍历二叉树.后序遍历求二叉树深度 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

HashMap的四种遍历方法,及效率比较(简单明了)

https://yq.aliyun.com/ziliao/210955 public static void main(String[] args) { HashMap<Integer, String> map = new HashMap<Integer, String>(); for (int i = 0; i < 40000; i++) { map.put(i, "第" + i + "个"); } //循环第一种 long t1 =

10 二叉树-链式存储-递归遍历

终于进入非线性数据结构的第一站了! 先从简单的开始回忆起来吧! 1.二叉树的链式存储 用一个链表来存储一颗二叉树,每一个结点用链表的一个链结点来存储. 通常地,一个二叉链表至少包含3个域:数据域data.左指针域lchild.右指针域rchild. 现实应用的过程中,可以按照自己的需求添加其他指针域. 1 typedef struct BitNode{ 2 int data; 3 struct BitNode *lchild,*rchild; 4 }BitNode,*BiTree; 2.遍历 二

二叉树链式存储和遍历

1 二叉树的链式存储 1.1 链式存储 顺序存储对空间利用率较低,所以,二叉树一般采用链式存储结构,用一个链表来存储一颗二叉树.二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild,如果再加上一个指向双亲结点的指针就变成了三叉链表. 二叉树的链式存储结构如下: /** * 二叉链表结点 * @author cyhe */ private class Node{ Integer data; Node lchild, rchild; } 根据完全二叉树的序列递归创建二叉

C++算法之 求二叉树的节点个数、深度、四种遍历方法

//节点的数据结构 class BTree { public: int m_nValue; BTree* m_nLeft; BTree* m_nRight; public: BTree(int value) { m_nValue = value; } }; 一:求二叉树的节点个数: /* 求二叉数中的节点个数 递归解法: 1:如果二叉树为空,节点的个数为0 2:如果二叉树不为空,二叉树节点的个数 = 左子树节点个数+右子树节点的个数+1: */ int GetNodeCount(BTree* p

java 完全二叉树的构建与四种遍历方法

本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下. 有如下的一颗完全二叉树: 先序遍历结果应该为:1  2  4  5  3  6  7 中序遍历结果应该为:4  2  5  1  6  3  7 后序遍历结果应该为:4  5  2  6  7  3  1 层序遍历结果应该为:1  2  3  4  5  6  7 二叉树的先序遍历.中序遍历.后序遍历其实都是一样的,都是执行递归操作. 我这记录一下层次遍历吧:层次遍历需要用到队列,先入队在出队,每次出队的元素检查是其是

RBAC类在ThinkPHP中的四种使用方法

第一类:放在登陆控制器的登陆操作中 1.RBAC::authenticate(); 用于在用户表中查找表单提交的用户名的数据,实质上就是一条用户表查寻语句,=====> return M(modle)->where(array)->find();这个操作有两个参数 a.array()数组的写法及作用和表查寻数组一样,=====>array(‘字段’=>‘值’,‘字段’=>array('条件','值')); b.model就是表名,默认是配制参数 C('USER_AUTH

java list详解及arrayList的四种遍历方法

1.List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象.   List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为   ArrayList或LinkedList,例如:List<String> l = new ArrayList<String>();// 利用ArrayList类实例化List集合Li

C语言描述-二叉树链式存储

#include <stdio.h> #include <stdlib.h> typedef char TElemType; typedef struct BiTNode { TElemType data; //数据 struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; /*构建二叉树*/ void CreateBiTree(BiTree *T) { TElemType e; if ((e=getchar()) == '#') {