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

1.前序遍历的规则:(根左右)

(1)访问根节点

(2)前序遍历左子树

(3)前序遍历右子树

对于图中二叉树,前序遍历结果:ABDECF

2.中序遍历的规则:(左根右)

(1)中序遍历左子树

(2)访问根节点

(3)中序遍历右子树

对于图中二叉树,中序遍历结果:DBEAFC

3.后序遍历二叉树的规则:(左右根)

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根节点

对于图中二叉树,后序遍历结果:DEBFCA

例题:POJ2255 给了前、中序遍历,求后序遍历。参考:https://blog.csdn.net/luckcircle/article/details/53327900

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #define MAX 50
 5 using namespace std;
 6
 7 char a[MAX],b[MAX];
 8 void build(int n,char *a,char *b){
 9     if(n<=0)return;
10     else{                      //先序根左右 中序左根右 后序左右根
11         int p=strchr(b,a[0])-b;//先序的第一个节点是根 在中序中找到根
12         build(p,a+1,b);        //并以此分成左右子串 递归求解
13         build(n-p-1,a+p+1,b+p+1);
14         printf("%c",a[0]);
15     }
16 }
17 int main(){
18     while(scanf("%s %s",a,b)!=EOF){
19         int n=strlen(a);
20         build(n,a,b);
21         printf("\n");
22         memset(a,0,sizeof(a));
23         memset(b,0,sizeof(b));
24     }
25 }

原文地址:https://www.cnblogs.com/noobimp/p/10321301.html

时间: 2024-11-09 02:19:38

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

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

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

根据前序和中序遍历求后序 /后序和中序求前序

给出一二叉树的前序遍历的顺序和中序遍历的顺序我们可以由此得出后序遍历的顺序,根据它们的访问顺序,前序遍历的第一个结点肯定是根结点,与之对应在中序遍历找到对应的根结点的位置,那么在中序遍历中,根结点的左边的元素都属于左子树的元素,根结点右边的元素都属于右子树的元素,之后把左子树当成一个继续操作,就这样可以推出整个树,继而求出后序遍历: #include<iostream> #include<cstdlib> #include<cstring> #include<cs

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

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

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

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

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

#include <stdio.h> #include <stdlib.h> //*****二叉树的二叉链表存储表示*****// typedef struct BiNode { char data; struct BiNode *lchild, *rchild; }BiNode, *BiTree; //*****按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树构造二叉链表表示的二叉树T*****// void CreateBiTree(BiTree &T) {

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

求解二叉树的高度 树是递归定义的,所以用递归算法去求一棵二叉树的高度很方便. #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

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