首页 > 其他分享 >318二叉树遍历

318二叉树遍历

时间:2023-12-23 12:33:44浏览次数:31  
标签:遍历 中序 char postorderTraverse 318 二叉树 序列

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 typedef struct treenode{
 5     char data;
 6     struct treenode *lchild;
 7     struct treenode *rchild;
 8 }treenode,*tree;
 9 
10 tree createTree(char *preorder,char *inorder,int n);
11 void postorderTraverse(tree t);
12 int main()
13 {
14     char preorder[27],inorder[27];
15     gets(preorder);
16     gets(inorder);
17     
18     int n;//the number of the vertex
19     n=strlen(preorder);
20     
21     
22     tree t;
23     t=createTree(preorder,inorder,n);
24     //
25     postorderTraverse(t);
26     return 0;
27 }
28 tree createTree(char *pre,char *in,int n)
29 {
30     int k;
31     char *p;//指针变量p跟习惯用的i/j/k没有区别
32     //if(n<=0) return NULL;
33     
34     treenode *b=(treenode*)malloc(sizeof(treenode));
35     b->data=*pre;
36     for(p=in;p<in+n;p++)
37     {
38         if(*p==*pre) break;
39     }
40     
41     k=p-in;
42     b->lchild=createTree(pre+1,in,k);
43     b->rchild=createTree(pre+k+1,p+1,n-k-1);
44     return b;
45     
46 }
47 void postorderTraverse(tree t)
48 {
49     /*if(!t) printf("EMPTY\n");
50     else
51     {
52         postorderTraverse(t->lchild);
53         postorderTraverse(t->rchild);
54         printf("%d ", t->data);
55     }*/
56     if(t)
57     {
58         postorderTraverse(t->lchild);
59         postorderTraverse(t->rchild);
60         printf("%c", t->data);
61     }
62 }

 

题目:二叉树遍历

问题描述

给定一棵二叉树的先序遍历和中序遍历序列,求其后序遍历序列。

输入格式

        输入数据有两行,为两个字符串,其长度n均小于等于26。第一行为先序遍历序列,第二行为中序遍历序列。

二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。

输出格式

        在一行上输出后序遍历序列。

样例输入

        ABC

BAC

样例输出

        BCA

 

这个题核心create函数 

42、43两行 一开始理解不了(看的还原二叉树 - 给定一棵二叉树的先序遍历序列和中序遍历序列,计算该二叉树的高度。_给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。 输入格式-CSDN博客),主要是对递归的理解不到位——递归每一层的变量值都是在变的

这个函数(已知先序和中序创建二叉树)还很常用 只能多写两遍了叭

附上已知前序遍历和中序遍历求二叉树_已知先序遍历和中序遍历求二叉树-CSDN博客,有图文一看就懂的程度

 

标签:遍历,中序,char,postorderTraverse,318,二叉树,序列
From: https://www.cnblogs.com/xzdmzrc221202/p/17922851.html

相关文章

  • 317输出完全二叉树的某一层
    题目:输出完全二叉树的某一层问题描述对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。输入格式       输入有多组数据。每组数据第一行输入一个结点数n(1<=n<=1000),第二行将树中的这n个节点依次输入(每个结点存储的数据是一个数字),n个结点编号......
  • 316完全二叉树的公共父结点
    题目:完全二叉树的公共父结点问题描述有一棵无限大的完全二叉树,该二叉树自上而下、自左而右从1开始编号。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从5到根结点的路径是(5,2,1),从4到根结点的路径是(4,2,1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1......
  • 315二叉树扩展先序遍历转中序遍历
    题目:二叉树扩展先序遍历转中序遍历问题描述编一个程序,读入用户输入的一串扩展先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的扩展先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出......
  • 314完全二叉树的子树
    题目:完全二叉树的子树问题描述对一棵完全二叉树,采用自上而下、自左往右的方式从1开始编号,我们已知这个二叉树的最后一个结点是n,现在的问题是结点m所在的子树一共包括多少个结点?输入格式       输入数据包括多行,每行给出一组测试数据,包括两个整数m,n(1<=m<=n<=10......
  • 23_合并二叉树
    617.合并二叉树给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为null的节点将......
  • 429. N 叉树的层序遍历(中)
    目录题目题解:BFS题目给定一个N叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由null值分隔(参见示例)。题解:BFSclassSolution:deflevelOrder(self,root:'Node')->List[List[int]]:ifnotroot:......
  • 199. 二叉树的右视图(中)
    目录题目题解:BFS题目给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。题解:BFS用BFS,每一层最后一个弹出队列的元素加到结果列表里面classSolution:defrightSideView(self,root:Optional[TreeNode])->Lis......
  • 107. 二叉树的层序遍历 II(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)题解:BFS用BFS把每层的结点存在一个单独的列表里,最后翻转整个结果列表classSolution:deflevelOrderBottom(self,root:Op......
  • 103. 二叉树的锯齿形层序遍历(中)
    目录题目题解:BFS题目给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。题解:BFS用BFS把每一层的结点存在一个列表里面,然后判断一下如果是偶数层就翻转列表,最后都加入结果列表返回即可classSo......
  • Java中的page集合的遍历(取值/赋值)
    Page<FwSjJbEntity>page1=newPage<>(page,pageSize);LambdaQueryWrapper<FwSjJbEntity>queryWrapper=newLambdaQueryWrapper<>();Page<FwSjJbEntity>jbEntityPage=newPage<FwSjJbEntity>();if(name==null||name.equals......