二叉树的遍历规则(前序遍历、后序遍历、中序遍历)

今天看了一些关于平和查找二叉树的问题,顺便也复习了一下二叉树的遍历规则,写一下学习文档。

树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。

如图所示二叉树:

前序遍历:前序遍历可以记为根左右,若二叉树为空,则结束返回。

前序遍历的规则:

(1)访问根节点

(2)前序遍历左子树

(3)前序遍历右子树

这里需要注意:在完成第2,3步的时候,也是要按照前序遍历二叉树的规则完成。

前序遍历的输出结果:ABDECF

中序遍历:中序遍历可以记为左根右,也就是说在二叉树的遍历过程中,首先要遍历二叉树的左子树,接着遍历根节点,最后遍历右子树。

同样,在二叉树为空的时候,结束返回。

中序遍历的规则:

(1)中序遍历左子树

(2)访问根节点

(3)中序遍历右子树

注意:在完成第1,3步的时候,要按照中序遍历的规则来完成。

中序遍历的输出结果:DBEAFC

后序遍历:后序遍历可以记为左右根,也就是说在二叉树的遍历过程中,首先按照后序遍历的规则遍历左子树,接着按照后序遍历的规则遍历右子树,最后访问根节点。

在二叉树为空的时候,结束返回。

后序遍历二叉树的规则:

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根节点

注意:在完成1,2步的时候,依然要按照后序遍历的规则来完成。

后序遍历的输出顺序:DEBFCA

时间: 2024-10-11 08:28:59

二叉树的遍历规则(前序遍历、后序遍历、中序遍历)的相关文章

前序+中序 = 二叉树(先序、中序、后序、层次遍历)

内心OS:我靠啊!!!我就是偷了一下懒!!!把先序遍历的代码COPY了两份,改成了中序和后序遍历.万万没想到啊!我忘了修改函数中递归函数的名字!!!找这个BUG花了我三个小时~~我哭啊~~,我还以为我的知识体系坍塌了呢?!!~ 总结,这是一道模板题,要先记住大体流程,然后反复练习. 输入格式: 第一行给出结点个数 N(1<=N<= 50) 第二行给出先序序列,共N个整数 第三行给出后序序列,共N个整数 输出格式: 第一行给出先序遍历结果: 第二行给出中序遍历结果: 第三行给出后续遍历结果: 第

给定二叉树先序、中序遍历序列,求后序遍历

给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输出后序遍历序列 示例1 输入 ABDEC DBEAC 输出 DEBCA思路:先根据先序.中序序列建立二叉树,然后后序遍历 import java.util.Scanner; import javax.print.attribute.standard.PresentationDirection; cl

二叉树的先序、中序、后序遍历等基本操作c++实现

二叉树:树的每个节点最多有两个子节点. 1.实现二叉链表的结构: //节点结构 template<class T> struct  BinaryTreeNode { BinaryTreeNode<T>* _left;//左子树 BinaryTreeNode<T>* _right;//右子树 T _data;//数据域 //构造函数 BinaryTreeNode(const T& x) :_left(NULL)//左孩子指针 ,_right(NULL)//右孩子指

二叉树的先序、中序、后序遍历

二叉树的遍历方法有多种,首先我想先改变这几个遍历的名字(前根序遍历,中根序遍历,后根序遍历):前中后本来就是相对于根结点来说的,少一个字会产生很多不必要的误解. 先简单描述一下这三种遍历方法的区别: 先序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树.上图中的先序遍历结果是ABDHECFG 中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树.上图中的中序遍历结果是HDBEAFCG 后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点.上图中的后序遍历结果是HDEBFGCA 先序遍历:

二叉树遍历(先序、中序、后序)

二叉树的遍历(递归与非递归) 遍历:traversal 递归:recursion 栈----------回溯----------递归 栈和回溯有关 本文讨论二叉树的常见遍历方式的代码(Java)实现,包括 前序(preorder).中序(inorder).后序(postorder).层序(level order), 进一步考虑递归和非递归的实现方式. 递归的实现方法相对简单,但由于递归的执行方式每次都会产生一个新的方法调用栈,如果递归层级较深,会造成较大的内存开销, 相比之下,非递归的方式则可以

树——二叉树的先序、中序和后序遍历

1,二叉树是否只有一种遍历方式(层次遍历)? 2,典型的二叉树的遍历方式: 1,先序遍历(Pre-Order Traversal): 2,中序遍历(In-Order Traversal): 3,后序遍历(Post-Order Traversal): 3,先序遍历(“先序”指最先访问根结点中的数据元素): 1,二叉树为空: 1,无操作,直接返回: 2,二叉树不为空: 1,访问根结点中的数据元素: 2,先序遍历左子树: 3,先序遍历右子树: 4,先序遍历功能定义及其代码实现: 1,代码示例: 1 p

二叉树问题:递归方式实现二叉树先序、中序、后序遍历

问题描述: 用递归方式实现二叉树的先序.中序.后序遍历. 算法实现: //二叉树节点private class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }} //前序遍历public void preOrderRecur(Node head) { if (head == null) { return; } System.ou

二叉树高度,以及栈实现二叉树的先序,中序,后序遍历的非递归操作

求解二叉树的高度 树是递归定义的,所以用递归算法去求一棵二叉树的高度很方便. #include <iostream> #include <cstdio> using namespace std; struct Node { char data; Node *lchild; Node *rchild; }; void High(Node *T, int &h) { if (T == NULL) h = 0; else { int left_h; High(T->lchi

Java实现二叉搜索树的添加,前序、后序、中序及层序遍历,求树的节点数,求树的最大值、最小值,查找等操作

什么也不说了,直接上代码. 首先是节点类,大家都懂得 /** * 二叉树的节点类 * * @author HeYufan * * @param <T> */ class Node<T extends Comparable<? super T>> { /** * 节点储存的值 */ private T data; /** * 左子节点 */ private Node<T> leftNode; /** * 右子节点 */ private Node<T>

C语言非递归实现二叉树的先序、中序、后序、层序遍历

C语言非递归实现二叉树的先序.中序.后序.层序遍历代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stack> 4 #include <queue> 5 using namespace std; 6 7 //*****二叉树的二叉链表存储表示*****// 8 typedef struct BiNode 9 { 10 char data; 11 struct BiNode *lchil