`
y806839048
  • 浏览: 1121012 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

遍历二叉树(四种方式:前序、中序、后序、层序)

阅读更多

 

 

二叉树顺序存储结构

 

二叉树的顺序存储结构就是用一维数组存储二义树中的结点并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等。二叉树的排序,之后按照,前序排序,中序排序,后序排序,层序排序就可以投影成数组,一般按照中序排序可以投射成由小到大的数组(平衡二叉树,红黑树都是特殊的二叉排序树)

 

顺序存储结构一般只用于完全二叉树。

 

 

 

将这棵二叉树存入到数组中,相应的下标对应其同样的位置:

 

 

 

二叉链表

 

typedef struct BiTNode  /* 结点结构 */

{

  TElemType data;                  /*结点数据 */

  struct BiTNode *lchild,*rchild; /* 左右孩子指针 */

}BiTNode,*BiTree;

 

 

 

 

遍历二叉树

 

二叉树的遍历是指从根结点出发。按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。

 

二叉树的遍历方法

 

1前序遍历

 

规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。

 

 

 

遍历的顺序为:ABDGHCEIF

 

/* 操作结果: 前序递归遍历T */

void PreOrderTraverse(BiTree T)

if(T==NULL)

return;

printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */

PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */

PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */

}

2中序遍历

 

规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。

 

 

 

遍历的顺序为:GDHBAEICF

 

/* 操作结果: 中序递归遍历T */

void InOrderTraverse(BiTree T)

if(T==NULL)

return;

InOrderTraverse(T->lchild); /* 中序遍历左子树 */

printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */

InOrderTraverse(T->rchild); /* 最后中序遍历右子树 */

}

3后序遍历

 

规则是若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后是访问根结点。

 

 

 

遍历的顺序为:GHDBIEFCA

 

/* 操作结果: 后序递归遍历T */

void PostOrderTraverse(BiTree T)

{

if(T==NULL)

return;

PostOrderTraverse(T->lchild); /* 先后序遍历左子树  */

PostOrderTraverse(T->rchild); /* 再后序遍历右子树  */

printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */

}

4层序遍历

 

    规则是若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。

 

 

 

遍历的顺序为:ABCDEFGHI

 

 

 

层序遍历:

 

//前序遍历的输入,每层打印自己的,准备好下层

 

public void cengx(Node node){

 

    if(node==null)

        return ;

 

    system.out.print(node.data+" ");

 List<Node> nodeList = new ArrayList<Node>();

 if(node.lchild!=null){

   nodeList.add(node.lchild);

  

  }

  if(node.rchild!=null){

   nodeList.add(node.rchild);

  }

   cxzy(nodeList);//所有子节点

 

    

 

}

 

 

 

cxzy(List<Node> nodeList){

 

List<Node> newnodeList = new ArrayList<Node>();

 

for(nodeList){

  if(nl.lchild!=null){

   newnodeList.add(nl.lchild);

  

  }

  if(nl.rchild!=null){

   newnodeList.add(nl.rchild);

  }

 system.out.print(nl.data+" ");

}

 

 

 

   if(newnodeList.size!=null)

     cxzy(newnodeList);

 

 

      

      }

 

 

层序遍历二:

用对了数据结构或分类恰当,就会有标准的递归,不用一个起头的函数 

 

 

 

public void levelOrder() {

    BiTNode<E> node =root;

    LinkedList<BiTNode<E>> list = new LinkedList<>();

    list.add(node);

    while(!list.isEmpty()) {

        node=list.poll();

        System.out.print(node.data);

        if(node.lchild!=null)

            list.offer(node.lchild);

        if(node.rchild!=null)

            list.offer(node.rchild);

    }

}

 

 

 

 

 

 

分享到:
评论

相关推荐

    二叉树的遍历及通过前序中序遍历确定后序层序遍历

    二叉树的遍历主要有三种经典方法:前序遍历、中序遍历和后序遍历。这些遍历方法是理解二叉树特性和操作的关键。 1. **前序遍历**(Preorder Traversal): - 遵循“根-左-右”的顺序访问节点。首先访问根节点,...

    二叉树 C++实现 建树 前序 中序 后序 层序

    本项目聚焦于使用C++语言实现二叉树的各种操作,包括构建、前序遍历、中序遍历、后序遍历以及层序遍历。下面将详细解释这些概念及其C++实现的关键点。 首先,二叉树是由节点构成的数据结构,每个节点最多有两个子...

    二叉树的基本操作,前序遍历,中序遍历,后序遍历,层序遍历

    本篇将详细介绍二叉树的基本操作,包括前序遍历、中序遍历、后序遍历以及层序遍历。 **1. 二叉树的基本操作** 二叉树的基本操作主要包括创建、插入、删除节点以及遍历等。创建二叉树时,需要指定根节点,之后通过...

    完全二叉树 满二叉树 二叉树遍历(前序、中序、后序).pdf

    二叉树的遍历是操作二叉树的基本方法,主要有三种经典的遍历方式: 1. **前序遍历**(根-左-右):首先访问根节点,然后递归地访问左子树,最后访问右子树。在给定的代码中,`CreateBiTree`函数就是根据前序遍历的...

    C++二叉树的前序,中序,后序,层序遍历的递归算法55555.docx

    常见的二叉树遍历方法有四种:前序遍历、中序遍历、后序遍历和层序遍历。 在本文中,我们将讨论C++语言实现的二叉树的前序、中序、后序、层序遍历的递归算法。我们将从二叉树的基本概念开始,逐步介绍四种遍历方法...

    已知二叉树的前序和中序遍历,打印后序遍历

    前序、中序和后序遍历是二叉树三种基本的遍历方式,每种方式都有其特定的访问顺序。这里我们将重点讨论如何在已知二叉树的前序和中序遍历的情况下,通过非递归算法实现后序遍历。 **前序遍历**:根节点 -&gt; 左子树 -...

    二叉树的遍历 二叉树的输出 递归和非递归实现 完美源代码 包括测试代码

    二叉树的遍历:前序,中序,后序,层序 包括 递归和非递归实现 包括测试代码 二叉树的输出 先找到最左边的叶子并把路上遇到的节点依次压栈,然后弹 出栈顶的元素(该元素为最左边的叶子),并判断(1)它 有没有右...

    遍历二叉树的几种方法代码

    以上介绍了二叉树的四种主要遍历方式:前序、中序、后序和层序遍历。每种遍历方式都有其特定的应用场景,比如前序遍历适用于复制树结构,中序遍历适用于查找二叉搜索树中的元素,后序遍历适用于释放树结构的内存,而...

    数据结构(先中后序遍历)

    二叉树的遍历方法不仅限于以上介绍的几种,还有其他变种,比如前序非递归遍历、中序非递归遍历和后序非递归遍历。非递归遍历通常涉及栈或队列等数据结构,对于理解和实现复杂算法非常有帮助。 在实际编程中,理解...

    Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】

    本文将深入探讨Python中的二叉树及其遍历方法,包括前序遍历、中序遍历、后序遍历以及层序遍历。通过具体的代码示例,我们将更好地理解这些遍历方法的工作原理和应用场景。 #### 二、二叉树基础知识回顾 二叉树是由...

    C++二叉树前序,中序,后序,按曾遍历

    二叉树遍历是访问二叉树中所有节点的过程,有三种主要的遍历方法:前序遍历、中序遍历和后序遍历。此外,还有一种层序遍历(按层遍历),但根据标题,这里主要讨论前三种。这些遍历方法在数据结构、算法和编译器设计...

    数据结构层序中序遍历构建二叉树

    其中,根据访问节点的顺序不同,有多种不同的遍历方式,包括前序遍历、中序遍历、后序遍历以及层序遍历等。本篇内容主要讨论如何通过给定的中序遍历序列和层序遍历序列来构建一颗二叉树,并提供了具体的实现代码。 ...

    建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)

    主要有三种遍历方式:前序遍历、中序遍历和后序遍历。对于本问题,我们关注的是层序遍历和前序遍历。 层序遍历,也叫广度优先遍历,按照从上到下、从左到右的顺序访问每一层的节点。我们可以使用队列来实现这个过程...

    二叉树遍历问题先序遍历、中序遍历和后序遍历等等最新详情介绍.docx

    遍历二叉树可以采用递归或迭代的方式来实现。 **递归方式**:递归方式简单直观,但是可能会导致栈溢出,尤其是在树的高度非常大的情况下。 **迭代方式**:迭代方式一般通过栈或队列来辅助实现。虽然实现相对复杂...

    Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例

    本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作。分享给大家供大家参考,具体如下: 实现一个功能:  输入:一颗二叉树的先序和中序遍历  输出:后续遍历 思想: 先序遍历中,第一个元素...

    二叉树的遍历的介绍.docx

    以上介绍了二叉树的四种遍历方式:前序遍历、中序遍历、后序遍历以及层序遍历。每种遍历都有其独特的应用场景。在实际编程过程中,根据不同的需求选择合适的遍历方式是非常重要的。掌握这些遍历技巧不仅能够帮助...

    第6章二叉树答案.doc

    "第6章二叉树答案" ...* 二叉树的遍历次序有六种:前序、中序、后序、层序、对称序和逆序。 本资源涵盖了二叉树的基本概念、存储结构、遍历算法、性质和应用,希望能够帮助读者更好地理解和掌握二叉树的知识点。

    LeetCode–144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)

    在二叉树中,常见的遍历方式有前序遍历、中序遍历、后序遍历以及层序遍历。 1. 前序遍历(Preorder Traversal) - 遍历顺序:根节点 -&gt; 左子树 -&gt; 右子树 - 递归实现:首先访问根节点,然后递归地对左子树进行...

    二叉树4种遍历方法的C语言实现

    本主题将详细介绍四种二叉树遍历方法的C语言实现:前序遍历、中序遍历、后序遍历以及层序遍历。 1. **前序遍历**: 前序遍历的顺序是根节点 -&gt; 左子树 -&gt; 右子树。在C语言中,我们可以递归地实现这个过程: - ...

    二叉树的遍历算法.zip

    在计算机科学中,二叉树遍历是访问二叉树所有节点的一种方法,通常分为三种主要类型:前序遍历、中序遍历和后序遍历。这三种遍历方式都有其独特的应用场景和特性,对于理解和操作二叉树数据结构至关重要。 1. 前序...

Global site tag (gtag.js) - Google Analytics