实验3:由遍历序列构造二叉树

二叉树构造定理:

  • 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定。
  • 定理7.2:任何n(n>0)个不同结点的二又树,都可由它的中序序列和后序序列唯一地确定。

题目: 已知先序序列为ABDGCEF,中序序列为DGBAECF,则构造二叉树的过程如下所示。

C语言代码示例:

 1 #include<stdio.h>
 2 #include<malloc.h>
 3
 4 typedef struct node
 5 {
 6     struct node *lchild, *rchild;
 7     char data;
 8 } BTNode;
 9
10 BTNode* CreateBTree(char *pre, char *in, int n)
11 {
12     int k;
13     char *p;
14     if (n <= 0)
15         return NULL;
16     BTNode *b = (BTNode*)malloc(sizeof(BTNode));
17     b->data = *pre;
18     for (p = in; p < in + n; ++p)
19         if (*p == *pre)
20             break;
21     k = p-in;
22     b->lchild = CreateBTree(pre+1, in, k);
23     b->rchild = CreateBTree(pre+k+1, p+1, n-k-1);
24     return b;
25 }
26
27 void dispBTree(BTNode *b)
28 {
29     if(b!= NULL)
30     {
31         printf("%c", b->data);
32         if(b->lchild != NULL || b->rchild != NULL)
33         {
34             printf("(");
35             dispBTree(b->lchild);
36             if(b->rchild != NULL)
37               printf(",");
38             dispBTree(b->rchild);
39             printf(")");
40         }
41     }
42  }
43
44 int main()
45 {
46     BTNode* b;
47     char pre[] = "ABDGCEF";
48     char in[] = "DGBAECF";
49     int n = 7;
50     b = CreateBTree(pre, in, 7);
51     dispBTree(b);
52     return 0;
53 }

View Code

运行结果:

C++代码示例:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
13     {
14       TreeNode *b = CreateBTree(preorder.begin(), inorder.begin(), inorder.size());
15         return b;
16     }
17
18     TreeNode* CreateBTree(vector<int>::iterator p, vector<int>::iterator q, int n)
19     {
20         TreeNode *b;
21         auto s = q;
22         int k;
23         if(n <= 0)
24             return nullptr;
25         b = new TreeNode(*p);
26         for(; s < q + n; ++s)
27             if(*s == *p)
28                 break;
29         k = s - q;
30         b->left = CreateBTree(p+1, q, k);
31         b->right = CreateBTree(p+k+1, s+1, n-k-1);
32         return b;
33     }
34 };

View Code

转载于:https://www.cnblogs.com/sunbines/p/9675280.html

树与二叉树 | 实验3:由遍历序列构造二叉树相关推荐

  1. 数据结构第七章实验题3-由遍历序列构造二叉树

    实验题3-由遍历序列构造二叉树 目的:领会二叉树的构造过程以及构浩二叉树的算法设计 内容:内容:编写一个程序exp7-3.cpp,实现由先序序列和中序序列以及由中序序列和后序序列构造一棵二叉树的功能( ...

  2. 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)

    17(105) 从前序与中序遍历序列构造二叉树(Medium) 描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例 例如,给出前序遍历 preorder = ...

  3. 实验3 | 由遍历序列构造二叉树

    二叉树构造定理: 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定. 定理7.2:任何n(n>0)个不同结点的二又树,都可由它的中序序列和后序序列唯一 ...

  4. 找树左下角的值+路径总和+从前序和中序遍历序列构造二叉树(day18*)

    这篇可以主要关注一下如何确定递归时是否需要返回值. LC513. 找树左下角的值 给定一个二叉树的根节点,请找出该二叉树的 最底层最左边 节点的值. 思路1 层序遍历 class Solution:d ...

  5. Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树

    513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...

  6. 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树

    LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...

  7. educoder数据结构 树 第1关:由双遍历序列构造二叉树

    目录 任务描述 编程要求 代码实现 任务描述 本关任务:实现 ConstructTree.cpp 里的TNode* InPreToTree(char *pa, char *ia, int p1, in ...

  8. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  9. 数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...

    106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7]后序遍 ...

最新文章

  1. python列表字典操作_Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...
  2. 基于Socket的UDP和TCP编程介绍
  3. 2018.90.20列表
  4. 动态矩阵控制 MATLAB代码
  5. jconsole工具监控java运行情况
  6. python Modbus基础
  7. php导入excel到mysql的方法
  8. linux 链接脚本,Linux下的lds链接脚本简介(一)
  9. vs2010 “最近使用的项目”为空?解决办法!
  10. 胡巴小年调皮搞事情?嗨翻五城华为体验店
  11. Python 解释器中使用help()命令如何退出
  12. iOS之StatusBar详解
  13. 通用设备的动态DMA映射
  14. linux 关闭 vim配色方案,10 个你值得拥有的 Vim 配色方案
  15. 游戏策划小白笔记——Common Sense(二)
  16. 【合集】高等数学随堂笔记-乐经良老师-全系列内容汇总
  17. ElementUI导航菜单嵌套多级折叠面板的小箭头图标bug
  18. IT 界惊现文豪!华为领导及阿里 P10 遭吐槽!
  19. Prometheus(二)基础概念
  20. WIndows 中文字体类型对应的文件名称

热门文章

  1. java 视频预览_java在上传视频时生成预览图
  2. 怎样设置java home_如何在Windows 7上设置java_HOME?
  3. mysql int 默认值 为ull_数据类型--ULL、ll
  4. python列表删除指定字典_Python:从列表中删除字典
  5. docker搭建ssr
  6. 【绝对干货】北京三年java开发多少工资
  7. 【深度学习】基于Pytorch进行深度神经网络计算(二)
  8. 【深度学习】基于Pytorch的线性模型概念辨析和实现(二)
  9. 【机器学习入门到精通系列】无监督学习之K-means
  10. from import python3_《Python语言程序设计》 —3.3.2 from import