给出二叉树的先序和中序遍历,给出后序遍历

实现一个功能:    输入:一颗二叉树的先序和中序遍历    输出:后续遍历

思想: 先序遍历中,第一个元素是树根        在中序遍历中找到树根,左边的是左子树 右边的是右子树
 1 def fromFMtoL(  mid ):
 2     global las  #全局后序遍历
 3     global fir  #先序遍历
 4
 5     root = fir[0]   #取出当前树根
 6
 7     fir = fir[1:]   #取出树根后 先序遍历把根拿出来 下面一个元素做树根
 8     root_po = mid.find( root )  #在中序遍历当中树根的位置
 9     left = mid[0:root_po]   #左子树
10     right = mid[root_po+1:len(mid)] #右子树
11
12     ‘‘‘
13     后序遍历: 左 右 根
14     先左子树 再右子树 最后跟
15     ‘‘‘
16
17     #有左子树的时候
18     if len(left) > 0:
19         fromFMtoL( left )
20     #有右子树的时候
21     if len(right) > 0:
22         fromFMtoL( right )
23
24     #树根写进结果
25     las += root
26
27
28
29 if __name__ == "__main__" :
30     # fir = input("请输入先序遍历:")     #前序遍历的结果
31     # mid = input("请输入中序遍历:")     #中序遍历的结果
32     fir = "DBACEGF"
33     mid = "ABCDEFG"
34     # fir = "ABC"
35     # mid = "BAC"
36     las = ""
37     fromFMtoL(  mid )
38
39     print(las)
时间: 2024-10-15 04:12:33

给出二叉树的先序和中序遍历,给出后序遍历的相关文章

根据前序遍历和中序遍历得出后序遍历

首先要明确前序,中序和后序的遍历顺序:前序:父节点,左子节点,右子节点:中序:左子节点,父节点,右子节点:后序:左子节点,右子结点,父节点: 明确之后,首先根据前序遍历,确定整个二叉树的根节点(前序的第一个节点):再通过中序遍历,可以直接根据根节点将整个二叉树分为左右两颗子树.这时再逐步根据前序和中序顺序,不难画出整个二叉树.进而可以写出后序遍历序列了. 例:已知某二叉树先序遍历序列是: A B C D E F H ,中序遍历序列是: B D C E A H F,写出后序遍历序列.由前序可知,该

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

如何由二叉树的先序和中序序列画出二叉树

今天数据结构的考试有这个题,做了好久,下来后,我好好地在网上查了一下,并结合我自己的理解,总结出来了一个比较好理解的方法.这个方法可以说做起这样的题又快又准. (概括为一个口诀:先序放中间,中序分两边)  基本思想就是递归:1.取出先序的第一个节点.(先序中的节点为根节点)2.用第一个节点可以将中序分成左右子树,然后又取出先序的第二个节点   再次将左右子树再次划分,3,当将中序全部划分为单个点时就结束.例如:假设一颗二叉树的先序序列是:EBADCFHGIKJ. 中序序列为:ABCDEFGHIJ

给出二叉树先序,中序遍历,求后序遍历

1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 100; 5 6 int n; 7 char a[maxn], b[maxn]; 8 9 void dfs(int la, int ra, int lb, int rb) { 10 if (la > ra) 11 return; 12 int md; 13 for (md = la; a[md] != b[lb]; md ++); 14 dfs(la,

二叉树基本操作:前序、中序、后序遍历(递归方式)

二叉树是最常见最重要的数据结构之一,它的定义如下: 二叉树(binary tree)是有限多个节点的集合,这个结合或者是空集,或者由一个根节点和两颗互不相交的.分别称为左子树和右子树的二叉树组成. 二叉树最基本的操作是遍历:一般约定遍历时左节点优先于右节点,这样根据根节点的遍历顺序可分为三种遍历操作:前序-先遍历根节点,再处理左右节点:中序-先遍历左节点,然后处理根节点,最后处理右节点:后序-先遍历左右节点,然后处理根节点. 从上边二叉树定义可以看出:二叉树使用了递归的概念描述.所以,二叉树的很

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

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

南阳OJ-756 重建二叉树(二叉树的中序遍历和后序遍历求先序遍历)

重建二叉树 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数据(少于100组),以文件结尾结束.每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法). 输出 每组输出数据单独占一行,输出对应得先序序列. 样例输入 ACBFGED ABCDEFG CDAB CBAD 样例输出 DBACEGF BCAD二

[LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 这道题要求用先序和中序遍历来建立二叉树,跟之前那道Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树原理基本相同,针对这道题,由于先

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