已知一棵二叉树的前序和中序遍历结果,输出后序遍历结果。哪位同学能写一下程序注释,尤其是4个参数的意义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知一棵二叉树的前序和中序遍历结果,输出后序遍历结果。哪位同学能写一下程序注释,尤其是4个参数的意义相关的知识,希望对你有一定的参考价值。
源程序如下:(我是学pascal的,其他语言的不要,不好意思了~~~)
program tree(input, output);
var s1, s2 : string;
procedure try(l1, r1, l2, r2 : integer);
var m : integer;
begin
m := pos(s1[l1], s2);
if m > l2 then try(l1 + 1, l1 + m - l2, l2, m - 1);
if m < r2 then try(l1 + m - l2 + 1, r1, m + 1, r2);
write(s1[l1])
end;
begin
readln(s1);
readln(s2);
try(1, length(s1), 1, length(s2));
writeln
end.
一颗二叉树的中序遍历=左子树中序遍历+根节点+右子树中序遍历
那么从前序遍历中取第一个点,就是根节点,知道了根节点,就可以找到中序遍历中跟节点的位置,那么就可以在中序遍历中找到左子树和右子树。
program tree(input, output);
var s1, s2 : string;
procedure try(l1, r1, l2, r2 : integer); 制造前序遍历为s1[l1] 至 s1[r1],中序遍历为s2[l2] 至s2[r2]的树
var m : integer;
begin
m := pos(s1[l1], s2);
s1[l1]就是根节点,那么就可以在中序遍历s2中找到根节点,m就是根节点在 中序遍历中的位置,根节点m前面的是左子树的中序遍历,后面的是右子树的中序遍历
if m > l2 then try(l1 + 1, l1 + m - l2, l2, m - 1); 递归处理左子树
if m < r2 then try(l1 + m - l2 + 1, r1, m + 1, r2); 递归处理右子树
write(s1[l1]) 输出当前根节点
end;
begin
readln(s1);
readln(s2);
try(1, length(s1), 1, length(s2));
一开始是对整个s1(前序遍历),整个s2(后续遍历)进行处理
writeln
end.
可以画个图看看,会明白的。
祝lz学业有成! 参考技术A //只有先序遍历,其它的可以在这个基础上改。
//如果有不懂的可以hi我
#include<stdio.h>
#include<stdlib.h>
typedef struct tnode
char data;
struct tnode *lchild;
struct tnode *rchild;
tnode;
tnode *Tree_creat(tnode *t)
char ch;
ch=getchar();
if(ch==' ')
t=NULL;
else
if(!(t=(tnode *)malloc(sizeof(tnode))))
printf("Error!");
t->data=ch;//printf("[%c]",t->data);
t->lchild=Tree_creat(t->lchild);
t->rchild=Tree_creat(t->rchild);
return t;
void preorder(tnode *t)
if(t!=NULL)
printf("%c ",t->data);
preorder(t->lchild);
preorder(t->rchild);
void main()
tnode *t=NULL;
t=Tree_creat(t);
preorder(t);
追问
pascal。。。不好意思
参考资料:百度一下
参考技术B //如果有不懂的可以hi我#include<stdio.h>
#include<stdlib.h>
typedef struct tnode
char data;
struct tnode *lchild;
struct tnode *rchild;
tnode;
tnode *Tree_creat(tnode *t)
char ch;
ch=getchar();
if(ch==' ')
t=NULL;
else
if(!(t=(tnode *)malloc(sizeof(tnode))))
printf("Error!");
t->data=ch;//printf("[%c]",t->data);
t->lchild=Tree_creat(t->lchild);
t->rchild=Tree_creat(t->rchild);
return t;
void preorder(tnode *t)
if(t!=NULL)
printf("%c ",t->data);
preorder(t->lchild);
preorder(t->rchild);
void main()
tnode *t=NULL;
t=Tree_creat(t);
preorder(t);
以上是关于已知一棵二叉树的前序和中序遍历结果,输出后序遍历结果。哪位同学能写一下程序注释,尤其是4个参数的意义的主要内容,如果未能解决你的问题,请参考以下文章