如何根据后序遍历和中序遍历建立二叉树

作者&投稿:龚行 (若有异议请与网页底部的电邮联系)
如何根据二叉树的前序遍历和中序遍历如何构建二叉树~

已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:
1. 根据前序序列的第一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在前序序列中确定左右子树的前序序列;
4. 由左子树的前序序列和中序序列建立左子树;
5. 由右子树的前序序列和中序序列建立右子树。

已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:
1. 根据后序序列的最后一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在后序序列中确定左右子树的后序序列;
4. 由左子树的后序序列和中序序列建立左子树;
5. 由右子树的后序序列和中序序列建立右子树。
另外,站长团上有产品团购,便宜有保证

TreeFrom_In_Post这个函数的功能是什么.

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define SIZE 100

typedef char ElemType;

//声明二叉树结构体

typedef struct node

{

ElemType data;

struct node *lchild,*rchild;

}BitTree;

BitTree *createBinTreeByPostIn(char *post,char *in,int number)

{

if(number==0) return NULL;

char c = post[number-1];

int i = 0;

while(in[i]!=c && i < number)i++;

int leftNumber = i;

int rightNumber = number - i - 1;

BitTree *node = (BitTree *)malloc(sizeof(BitTree));

node->data = c;

node->lchild = createBinTreeByPostIn(&post[0],&in[0],leftNumber);

node->rchild = createBinTreeByPostIn(&post[leftNumber],&in[i+1],rightNumber);

return node;

}

void PreOrder(BitTree *bt)

{

if(bt!=NULL)

{

printf("%c ",bt->data);

PreOrder(bt->lchild);

PreOrder(bt->rchild);

}

}

int main(int argc,char **argv)

{

char a[SIZE],b[SIZE];

BitTree *p;

while(scanf("%s%s",a,b)!=EOF)

{

p = createBinTreeByPostIn(a,b,strlen(a));

PreOrder(p);

printf("
");

}

return 0;

}

扩展资料:

注意事项

一、中序遍历(LDR)

中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。即:
若二叉树为空则结束返回,否则:

1、中序遍历左子树

2、访问根结点

3、中序遍历右子树。

注意的是:遍历左右子树时仍然采用中序遍历方法。

二、后序遍历(LRD)后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。在遍历左、右子树时,仍然先遍历左子树,再遍历右子树,最后访问根结点。即:

若二叉树为空则结束返回,否则:

1、后序遍历左子树。

2、后序遍历右子树。

3、访问根结点。

注意的是:遍历左右子树时仍然采用后序遍历方法。 



前序遍历:1 2 4 8 9 10 11 5 3 6 7 (规律:根在前;子树在根后且左子树比右子树靠前);

中序遍历:8 4 10 9 11 2 5 1 6 3 7 (规律:根在中;左子树在跟左边,右子树在根右边);

后序遍历:8 10 11 9 4 5 2 6 7 3 1 (规律:根在后;子树在根前且左子树比右子树靠前);

其它例子:
前序遍历:ABDECFG
中序遍历:DBEAFCG
后序遍历:DEBFGCA

前序遍历:1 2 4 3 5 7 6
中序遍历:2 4 1 5 7 3 6
后序遍历:4 2 7 5 6 3 1

做类似的题目,你可以先由两个遍历画出二叉树。通过形象的二叉树来写出另一个遍历,写的方法如上(递归)。画出二叉树的方法如下:

已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:
1. 根据前序序列的第一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在前序序列中确定左右子树的前序序列;
4. 由左子树的前序序列和中序序列建立左子树;
5. 由右子树的前序序列和中序序列建立右子树。

已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:
1. 根据后序序列的最后一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在后序序列中确定左右子树的后序序列;
4. 由左子树的后序序列和中序序列建立左子树;
5. 由右子树的后序序列和中序序列建立右子树。
另外,站长团上有产品团购,便宜有保证

二叉树的中序和后序遍历序列是什么?
答:则它的先跟遍历序列是:EACBDGF。首先明确先跟遍历:中左右;中根遍历:左中右;后根遍历:左右中。1、后根遍历明确根节点是E,中根遍历确定左子树是ABCD,右子树上是FG;2、后序遍历,A是左子树的根,然后在中序里ABCD判断A没有左子树;3、根据GF中序序列所知F应该为G的左节点。

建立二叉树,层序、先序、中序、后序遍历( 用递归或非递归的方法都需要...
答://===LNR 中序遍历=== void Inorder(BinTree T){ if(T) { Inorder(T->lchild); //中序遍历左子树 printf("%c",T->data); //访问结点 Inorder(T->rchild); //中序遍历右子树 } } //===LRN 后序遍历=== void Postorder(BinTree T){ if(T) { Postorder(T->lchil...

二叉树的前序、中序和后序遍历序列分别是什么?
答:先序遍历二叉树规则:根-左-右 1、访问根结点;2、先序遍历左子树;3、先序遍历右子树。中序遍历二叉树规则:左-根-右 1、先中序遍历左子树;2、再访问根节点;3、最后访问中序遍历右子树。后序遍历二叉树规则:左-右-根 1、后序遍历左子树;2、后序遍历右子树;3、访问根结点。

、建立一颗二叉树,并分别按先序、中序和后序遍历这棵二叉树,要求以二叉...
答:void InOrder(BiTree &T)//中序遍历二叉树(递归){ if(T){ InOrder(T->lchild);cout<<T->data<<" ";InOrder(T->rchild);} } void PostOrder(BiTree &T)//后序遍历二叉树(递归){ if(T){ PostOrder(T->lchild);PostOrder(T->rchild);cout<<T->data<<" ";} } 望采纳~~~

怎么写二叉树的先序遍历、中序遍历、后序遍历?
答:一、先序遍历:1、访问根节点 2、前序遍历左子树 3、前序遍历右子树 二、中序遍历:1、中序遍历左子树 2、访问根节点 3、中序遍历右子树 三、后序遍历:1、后序遍历左子树 2、后序遍历右子树 3、访问根节点 下面介绍一下例子与方法:1、画树求法:第一步,根据前序遍历的特点,我们知道根...

二叉树的先序、中序和后序遍历序列有什么特点?
答:【答案】先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:“左子树—右子树―根”,根据以上原则,解答如下:1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。2)若中序序列与后序序列相同,则或为空树,或为任一结点...

已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍因序 ...
答:前序遍因序列是cedba。二又树的遍历有3种:前序、中序和后序。①前序首先遍历访问根结点,然后按左右顺序遍历子结点。②中序遍历首先访问左子树,然后访问根结点,最后遍历右子树。③后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。本题根据后序和中序遍历的结果可以得出二叉树的结构,然后...

根据先序遍历和中序遍历构造二叉树
答:【题目】根据二叉树中序和后序(先序)遍历结果 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回 【...

怎么根据二叉树的前序,中序,确定它的后序
答:怎么根据二叉树的前序,中序,确定它的后序 二叉树遍历分为三类:前序遍历,中序遍历和后序遍历。前序遍历:先访问根节点,然后遍历左子树,最后遍历右子树;并且在遍历左,右子树时,仍需先访问根节点,然后遍历左子树,最后遍历右子树。中序遍历:先遍历左子树,然后访问根节点,最后遍历右子树;...

森林有中序和后序遍历吗
答:是的,森林(多个不相交的树)也有中序和后序遍历。中序遍历:先访问森林中所有树的根节点的左子树,然后访问根节点,最后访问右子树。后序遍历:先访问森林中所有树的左子树,然后访问右子树,最后访问根节点。需要注意的是,森林的中序遍历和后序遍历都是相对于森林中的每个树分别进行遍历的,即先将...