Python 二叉树的创建和遍历、重建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 二叉树的创建和遍历、重建相关的知识,希望对你有一定的参考价值。
参考技术A 几个有限元素的集合,该集合为空或者由一个根(Root)的元素及两不相交的(左子树和右子树)的二叉树组成,是有序树,当集合为空时,称为空二叉树,在二叉树中,一个元素也称为一个结点。前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树
中序遍历:若树为空,则空操作返回,否则从根结点开始(不是先访问根结点),中序遍历根结点的左子树,然后访问根节点,最后中序遍历右子树。
后序遍历:若树为空,则空操作返回,否则从左到右先访问叶子结点后结点的方式遍历左右子树,最后访问根节点。
层序遍历:若树为空,则空操作返回,否则从树的每一层,即从根节点开始访问,从上到下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
假设已知后序遍历和中序遍历结果,从后序遍历的结果可以等到最后一个访问的结点是根节点,对于最简单的二叉树,此时在中序遍历中找到根节点之后,可以分辨出左右子树,这样就可以重建出这个最简单的二叉树了。而对于更为复杂的二叉树,重建得到根结点和暂时混乱的左右结点,通过递归将左右结点依次重建为子二叉树,即可完成整个二叉树的重建。(在得到根结点之后,需要在中序遍历序列中寻找根结点的位置,并将中序序列拆分为左右部分,所以要求序列中不能有相同的数字,这是序列重建为二叉树的前提。)
Root =None
strs="abc##d##e##" #前序遍历扩展的二叉树序列
vals =list(strs)
Roots=Create_Tree(Root,vals)#Roots就是我们要的二叉树的根节点。
print(Roots)
inorderSearch = inOrderTraverse2(Roots)
print(inorderSearch)
重建二叉树与二叉树的层次遍历
数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描写叙述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000)。代表有t组測试数据。每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
演示样例输入
2 abdegcf dbgeafc xnliu lnixu
演示样例输出
dgebfca abcdefg linux xnuli
#include <stdio.h> #include <iostream> #include <cstring> #include <queue> #include <algorithm> using namespace std; typedef struct node { char data; node *lch,*rch; }btree,*bt; char pre[55],ins[55]; void build(bt &T,char *pre,char *ins,int n) //依据先序和中序重建二叉树 { if(n<=0) T=NULL; else { int k=strchr(ins,pre[0])-ins; T=new btree; T->data=pre[0]; build(T->lch,pre+1,ins,k); build(T->rch,pre+k+1,ins+k+1,n-k-1); } } void last(bt T)//后序遍历 { if(T) { last(T->lch); last(T->rch); cout<<T->data; } } void level(bt T) //层次遍历(BFS) { queue <btree> Q; Q.push(*T); while(!Q.empty()) { btree next=Q.front(); Q.pop(); cout<<next.data; if(next.lch) Q.push(*(next.lch)); if(next.rch) Q.push(*(next.rch)); } } int main() { bt root; int n; cin>>n; getchar(); while(n--) { cin>>pre>>ins; build(root,pre,ins,strlen(pre)); last(root); cout<<endl; level(root); cout<<endl; } return 0; }
以上是关于Python 二叉树的创建和遍历、重建的主要内容,如果未能解决你的问题,请参考以下文章