typedef struct NodeType{
int data;
struct NodeType* left;
struct NodeType* right;
NodeType(){left = NULL;right = NULL;};
}Node;
/*
* parameter arr_pre, preorder array of tree
* parameter size_pre, size of preorder array
* parameter arr, order array of tree
* parameter size, size of order array
*
* Traverse order array of binary tree to construct a binary tree(遍历中序数组来构建二叉树)
*/
NodeType* BuildTree(NodeType* arr_pre, int size_pre, NodeType* arr, int size)
{
if ( 0 == size) return NULL;
Node* sub_root = NULL;
int root_index_in_arr = 0;
bool is_found = false;
for (int i = 0;(i < size_pre) && (!is_found);i++) {
int data = (arr_pre + i)->data;
for (int j = 0;j < size;j++) {
if (data == (arr + j)->data) {
sub_root = arr + j;
root_index_in_arr = j;
is_found = true;
break;
}
}
}
sub_root->left = BuildTree(arr_pre, size_pre, arr, root_index_in_arr); //Left subtree
sub_root->right = BuildTree(arr_pre, size_pre, arr + root_index_in_arr + 1, size - root_index_in_arr - 1); //Right subtree
return sub_root;
}
//Traverse in postorder(后续遍历输出)
void PrintPostorder(NodeType* root)
{
if (NULL != root) {
PrintPostorder(root->left);
PrintPostorder(root->right);
cout << (char) root->data << endl;
}
}
void SearchRelatedNodes(NodeType* root, int value, NodeType* parent)
{
if (NULL != root) {
if (root->data == value) {
if (NULL != parent) {
cout << "Parent is : " << (char) parent->data << endl;
} else {
cout << "Parent is : NULL" << endl;
}
if (NULL != root->left) {
cout << "left son is : " << (char) root->left->data << endl;
} else {
cout << "left son is : NULL" << endl;
}
if (NULL != root->right) {
cout << "right son is : " << (char) root->right->data << endl;
} else {
cout << "right son is : NULL" << endl;
}
}
parent = root;
SearchRelatedNodes(root->left, value, parent);
SearchRelatedNodes(root->right, value, parent);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
NodeType tmp;
tmp.data = 'a';
NodeType tmp1;
tmp1.data = 'b';
NodeType tmp2;
tmp2.data = 'd';
NodeType tmp3;
tmp3.data = 'e';
NodeType tmp4;
tmp4.data = 'h';
NodeType tmp5;
tmp5.data = 'c';
NodeType tmp6;
tmp6.data = 'f';
NodeType tmp7;
tmp7.data = 'g';
//Preorder: abdehcfg
//Order: dbehafcg
NodeType pre[8] = {tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7}; //Preorder array(前序遍历数组)
NodeType order[8] = {tmp2,tmp1,tmp3,tmp4,tmp,tmp6,tmp5,tmp7}; //Order array(中序遍历数组)
NodeType* root = BuildTree(pre, 8, order, 8);
PrintPostorder(root);
SearchRelatedNodes(root, 'c', NULL);
}相关推荐
别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案
本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。
算法:通过先序和中序数组生成后序数组
已知一棵二叉树所有的节点值都不同,给定先序和中序序列,不重建二叉树,生成后序序列。如: preorder: 1 2 4 5 3 6 7 inorder: 4 2 5 1 6 3 7 => postorder: 4 5 2 6 7 3 1preorder: 1 2 4 5 3 6 7 inorder: 4 2 5 1 6 3 7先序序列的第一个值肯定是根节点,从中序序列找到这个值(二叉树所有节点值不相同为前提),则中序序列中,根节点左边的4 2 5是左子树,右边的6 3 7是右子树。递归求解即可思路:根据当前
Research Proposal:自动驾驶 行人运动预测
Research Proposal about Pedestrian/Cyclist Motion Prediction for Self-Driving Vehicles If I can be provided with the opportunity to conduct PhD research in pedestrian/cyclist motion prediction for...
二叉树问题---通过先序和中序数组生成后序数组
基本思路: 根据当前的先序和中序数组,设置后序数组最右边的值,然后划分出左子树的先序、中序数组,以及右子树的先序、中序数组,先根据右子树的划分设置好后序数组,再根据左子树的划分,从右边到左边依次设置好后序数组的全部位置#python3.5 #通过先序和中序数组生成后序数组 def preInToPos(pre, mid): def preInPos(pre, pi, pj, mid,
武汉理工大学 python实验三
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有。编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。,如果有多个解,则分行输出,每行一个解;
Epicor ERP 界面新增客制化字段操作方法
我发现国内对于epicor这个erp软件的教程非常少,所以录制一些我实际遇到的需求,整理了实现过程,提供给大家参考。
先序中序数组推后序数组
二叉树遍历 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: ⑴访问结点本身(N), ⑵遍历该结点的...
Lammps模拟剪切作用下的位错滑移
Lammps模拟位错与障碍物作用。在lammps中实现周期性位错阵列模型模拟剪切作用下1/2刃位错与障碍物的交互作用
【简单】通过先序和中序数组生成后序数组-Java
package live.every.day.ProgrammingDesign.CodingInterviewGuide.BinaryTree; import java.util.Arrays; import java.util.HashMap; /** * 通过先序和中序数组生成后序数组 * * 【题目】 * 已知一棵二叉树所有的节点值都不同,给定这棵树正确的先序和中序数组,不要重建整棵树,而是通过这两个数组直接生成正确的后序 * 数组。 * * 【难度】 * 简单 * * 【解
GPS天线结构、原理、测试
【有源陶瓷天线构成】GPS天线是由接收天线和前置放大器两个部件组成。GPS接收天线的作用,是将卫星来的无线电信号的电磁波能量变换成接收机电子器件可摄取应用的电流。绝大部分内置GPS天线为右旋极化陶瓷介质,其组成部分为:陶瓷天线、低噪音信号模块、线缆、[接头](h
DaVinci Developer和DaVinci Configurator:AutoSAR开发与配置工具
a. 组件创建:DaVinci Developer允许开发人员创建不同类型的AutoSAR软件组件,如应用软件组件(Application Software Component,SWC)、基础软件组件(Basic Software Component,BSWC)等。除了以上功能,DaVinci Developer和DaVinci Configurator还提供了丰富的文档和代码生成功能,以支持开发人员和配置人员进行文档编写、代码生成和文档浏览等任务。用户可以根据具体需求对软件组件进行灵活的配置。
根据先序遍历和中序遍历生成后序遍历
定义递归函数。
【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)
摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、
二叉树: 根据二叉树的前序数组和中序序遍历数组生成二叉树
https://www.cnblogs.com/googlemeoften/p/5853280.html 题目:给定二叉树的前序遍历和中序遍历,生成二叉树。 Example: 前序遍历数组:preArr[]:{1,2,4,5,3,6,7} 中序遍历数组:inArr[]:{4,2,5,1,6,3,7} 生成的二叉树如下图: 解题思路: 由二叉树的前序变量性质可知:preArr[0]...
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
通过先序和中序数组生成后序数组
【题目】已知一棵二叉树所有的节点值都不同,给定这棵树正确的先序和中序数组,不要重建整棵树,而是通过这两个数组直接生成正确的后序数组。 public class GetPosArray { public static int[] getPosArray(int[] pre, int[] in) { if (pre == null || in == null) { return null;...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
根据前序和中序数组构造二叉树
根据前序和中序生成一个二叉树,用java实现
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
前序和后序构成二叉树java_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...
概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树而对于普通的二叉树来说,也可以根据前序、中序和后序遍历得到的数组,还原二叉树还原还原的情况分两种,分别是根据前序、中序和根据中序、后序采用的二叉树如下图所示:注意:前序和后序是没有办法还原二叉树根据前序、中序还原二叉树如下图所示:基本思路:根据前序数组,我们能够确定根节点(因为前序数组的根节点一...
c#实现根据前序数组和中序数组重建二叉树
思路 前序:根节点->左子树->右子树 中序:左子树->根节点->右子树 : def __init__(self, val): self.val = val self.left = None self.right = None class BST(): def __init__(self, root=None): ...
leetcode105/剑指offer7.从前序与中序遍历序列构造二叉树/程序员代码面试指南.通过先序和中序数组生成后序数组
题目一:从前序与中序遍历序列构造二叉树 1.题目描述 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 2.解题思路 ...
分别根据前中序遍历和后中序遍历来推二叉树的结构
1、理论分析: 数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不同遍历序列(先序、中序、后序),重构二叉树。显然,这三种组合并不是都能唯一确定二叉树的,其中先序+后序就不能唯一确定一棵二叉树。这里我就不证明了。举个反例: 反例:任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,
通过先序和中序数组得到后序数组——Java实现
题目:给出一棵二叉树的先序和中序数组,通过这两个数组直接生成正确的后序数组。 Java代码: import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] pre=new int[n]; int[] o
java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...
概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树而对于普通的二叉树来说,也可以根据前序、中序和后序遍历得到的数组,还原二叉树还原还原的情况分两种,分别是根据前序、中序和根据中序、后序采用的二叉树如下图所示:注意:前序和后序是没有办法还原二叉树根据前序、中序还原二叉树如下图所示:基本思路:根据前序数组,我们能够确定根节点(因为前序数组的根节点一...
331



被折叠的 条评论
为什么被折叠?



