二叉树构造定理:

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

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

1.1.1 C代码:

#include<stdio.h>
#include<malloc.h>typedef struct node
{struct node *lchild, *rchild;char data;
} BTNode;BTNode* CreateBTree(char *pre, char *in, int n)
{int k;char *p;if (n <= 0)return NULL;BTNode *b = (BTNode*)malloc(sizeof(BTNode));b->data = *pre;for (p = in; p < in + n; ++p)if (*p == *pre)break;k = p-in;b->lchild = CreateBTree(pre+1, in, k);b->rchild = CreateBTree(pre+k+1, p+1, n-k-1);return b;
}void dispBTree(BTNode *b)
{if(b!= NULL){printf("%c", b->data);if(b->lchild != NULL || b->rchild != NULL){printf("(");dispBTree(b->lchild); if(b->rchild != NULL)printf(",");dispBTree(b->rchild);printf(")");                 }}} int main()
{BTNode* b;char pre[] = "ABDGCEF";char in[] = "DGBAECF";int n = 7;b = CreateBTree(pre, in, 7);dispBTree(b);return 0;
}

1.1.2 C++代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {TreeNode *b = CreateBTree(preorder.begin(), inorder.begin(), inorder.size());return b;    }TreeNode* CreateBTree(vector<int>::iterator p, vector<int>::iterator q, int n){TreeNode *b;auto s = q;int k;if(n <= 0)return nullptr;b = new TreeNode(*p);for(; s < q + n; ++s)if(*s == *p)break;k = s - q;b->left = CreateBTree(p+1, q, k);b->right = CreateBTree(p+k+1, s+1, n-k-1);return b;}
};

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

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

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

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

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

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

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

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

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

  5. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法

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

  6. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  7. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  8. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

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

  9. [leetcode]从中序与后序/前序遍历序列构造二叉树

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

最新文章

  1. !important------至高无上的宝剑
  2. ChipScope Pro内核插入器
  3. HTML中显示数学公式
  4. java自定义异常报错
  5. 2020年Q3笔记本电脑出货量:惠普反超联想居首位 苹果第四
  6. 细数python标准库中低调的模块
  7. 自己制作博客园打赏功能
  8. Revit软件安装族库/族样板/项目样板默认位置在哪?(详细说明)
  9. python excel数据分析师培训_从零开始学可视化数据分析师就业课程(Excel、 MySQL、Power BI、Tableau、python、R)...
  10. python 回归方程及回归系数的显著性检验_回归方程及回归系数的显著性检验演示教学...
  11. 上海航芯 | 热敏打印机方案分享
  12. 2019各个省会城市全新DNS大全一
  13. python matlab库使用_python matlab库
  14. ArcGIS教程 - 4 GIS数据
  15. 2021年山东省安全员C证考试题及山东省安全员C证报名考试
  16. 一个u盘大小的树莓派就能搭建一个服务器
  17. 基于GEE与哨兵1号影像数据提取水体
  18. 记一次 D-LINK DIR-882 路由器刷固件 padavan
  19. 计算机在线给手机杀毒,国家计算机病毒应急处理中心曝光6款恶意应用 腾讯手机管家实现精准查杀...
  20. 计算多个产品的平均价格

热门文章

  1. iOS-如何返回某个字符串的拼音助记码
  2. (接口)银联证书上传被修改的问题和读取证书的绝对路径问题
  3. web.xml 中的listener、 filter、servlet 加载顺序
  4. 关于重装系统后或打补丁后不能上网的问题的解决
  5. 商海致富独家秘诀:微笑可以当钱花
  6. 骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...
  7. java 枚举 values_JAVA 枚举运用一 values方法
  8. 清华计算机自主招生试题,2017年清华大学自主招生笔试题
  9. java scanner_Java Scanner nextLong()方法与示例
  10. Vestigium-Google CodeJam 2020资格回合问题1解决方案