根据二叉树的前序数组和中序数组生成二叉树

C语言实现二叉树的基本操作 主要为大家详细介绍了C语言实现二叉树的基本操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载
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);
}


契约锁代码审计分析 但是正常来讲,定义了这么多的路由,肯定会有一个通用的判断逻辑,来判断请求的url是否和这些路由匹配。POC中有一点值得注意,Spring新一些的版本中支持以表单的形式来为参数赋值,且无需用注解。但是需要注意4.2.8的代码逻辑和新版本中的不同,此漏洞可能存在于版本大于4.2.8的版本中。方法用于解析LICENSE,先进行AES解密,再从字符串转换成json格式的License。loadPath实际判断传入的path是否和下面的path相等,如果不相等返回null。,如果包含这三个中的一个就会抛出异常。 阅读详情

相关推荐

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 331

算法:通过先序和中序数组生成后序数组

已知一棵二叉树所有的节点值都不同,给定先序和中序序列,不重建二叉树,生成后序序列。如: 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是右子树。递归求解即可思路:根据当前

OceanStar的博客 413

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...

Poetry Wanderer的博客 3086

二叉树问题---通过先序和中序数组生成后序数组

基本思路:   根据当前的先序和中序数组,设置后序数组最右边的值,然后划分出左子树的先序、中序数组,以及右子树的先序、中序数组,先根据右子树的划分设置好后序数组,再根据左子树的划分,从右边到左边依次设置好后序数组的全部位置#python3.5 #通过先序和中序数组生成后序数组 def preInToPos(pre, mid): def preInPos(pre, pi, pj, mid,

冰殇的博客 1124

武汉理工大学 python实验三

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有。编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。,如果有多个解,则分行输出,每行一个解;

2401_83472225的博客 5949

Epicor ERP 界面新增客制化字段操作方法

我发现国内对于epicor这个erp软件的教程非常少,所以录制一些我实际遇到的需求,整理了实现过程,提供给大家参考。

cqxianggang的专栏 411

先序中序数组推后序数组

二叉树遍历 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: ⑴访问结点本身(N), ⑵遍历该结点的...

少说,多做。 4353

Lammps模拟剪切作用下的位错滑移

Lammps模拟位错与障碍物作用。在lammps中实现周期性位错阵列模型模拟剪切作用下1/2刃位错与障碍物的交互作用

Rockyoung 3457

【简单】通过先序和中序数组生成后序数组-Java

package live.every.day.ProgrammingDesign.CodingInterviewGuide.BinaryTree; import java.util.Arrays; import java.util.HashMap; /** * 通过先序和中序数组生成后序数组 * * 【题目】 * 已知一棵二叉树所有的节点值都不同,给定这棵树正确的先序和中序数组,不要重建整棵树,而是通过这两个数组直接生成正确的后序 * 数组。 * * 【难度】 * 简单 * * 【解

了解➔熟悉➔掌握➔精通 974

GPS天线结构、原理、测试

【有源陶瓷天线构成】GPS天线是由接收天线和前置放大器两个部件组成。GPS接收天线的作用,是将卫星来的无线电信号的电磁波能量变换成接收机电子器件可摄取应用的电流。绝大部分内置GPS天线为右旋极化陶瓷介质,其组成部分为:陶瓷天线、低噪音信号模块、线缆、[接头](h

数字世界 万物互联 2万+

DaVinci Developer和DaVinci Configurator:AutoSAR开发与配置工具

a. 组件创建:DaVinci Developer允许开发人员创建不同类型的AutoSAR软件组件,如应用软件组件(Application Software Component,SWC)、基础软件组件(Basic Software Component,BSWC)等。除了以上功能,DaVinci Developer和DaVinci Configurator还提供了丰富的文档和代码生成功能,以支持开发人员和配置人员进行文档编写、代码生成和文档浏览等任务。用户可以根据具体需求对软件组件进行灵活的配置。

HmoaAmp的博客 2261

根据先序遍历和中序遍历生成后序遍历

定义递归函数。

Practitioner 2929

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

二叉树: 根据二叉树的前序数组和中序序遍历数组生成二叉树

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]...

sky302761277的优快云 336

文档:亲测可用解决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;...

gkq_tt的博客 779

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

根据前序和中序数组构造二叉树

根据前序和中序生成一个二叉树,用java实现

qq_41871318的博客 471

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

前序和后序构成二叉树java_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...

概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树而对于普通的二叉树来说,也可以根据前序、中序和后序遍历得到的数组,还原二叉树还原还原的情况分两种,分别是根据前序、中序和根据中序、后序采用的二叉树如下图所示:注意:前序和后序是没有办法还原二叉树根据前序、中序还原二叉树如下图所示:基本思路:根据前序数组,我们能够确定根节点(因为前序数组的根节点一...

weixin_31191387的博客 392

c#实现根据前序数组和中序数组重建二叉树

思路 前序:根节点->左子树->右子树 中序:左子树->根节点->右子树 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191126123923843.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6L...

weixin_43028966的博客 437

根据后序数组重建二叉树

题目        给定一个整型数组arr,已知没有重复值,判断arr是否可能是节点值类型为整型的搜索二叉树后序遍历的结果。        进阶问题:如果整型数组中没有重复值,且已知是一棵二叉搜索树的后序遍历结果,通过arr重构二叉树。 解答: 二叉树的后序遍历是先左、再右、最后根的顺序,所以,头节点一定是数组的最后一个元素。根据搜索二叉树的性质,比后序数组最后一个元素

爱吃鱼的ねこ的博客 390

根据后序数组重建搜索二叉树

根据后序数组重建搜索二叉树 题目 BST 用于测试 class TreeNode(): def __init__(self, val): self.val = val self.left = None self.right = None class BST(): def __init__(self, root=None): ...

孤舟钓客 442

leetcode105/剑指offer7.从前序与中序遍历序列构造二叉树/程序员代码面试指南.通过先序和中序数组生成后序数组

题目一:从前序与中序遍历序列构造二叉树 1.题目描述 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 2.解题思路 ...

没有感情的刷题机器 430

分别根据前中序遍历和后中序遍历来推二叉树的结构

1、理论分析: 数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不同遍历序列(先序、中序、后序),重构二叉树。显然,这三种组合并不是都能唯一确定二叉树的,其中先序+后序就不能唯一确定一棵二叉树。这里我就不证明了。举个反例: 反例:任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,

Anna的博客 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

ling08140814的博客 866

java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...

概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树而对于普通的二叉树来说,也可以根据前序、中序和后序遍历得到的数组,还原二叉树还原还原的情况分两种,分别是根据前序、中序和根据中序、后序采用的二叉树如下图所示:注意:前序和后序是没有办法还原二叉树根据前序、中序还原二叉树如下图所示:基本思路:根据前序数组,我们能够确定根节点(因为前序数组的根节点一...

weixin_28040125的博客 568
上一篇: UML类图中的关系
下一篇: unix网络编程卷2的头文件unpipc.h下载和编译(转)
nodeathphoenix
博客等级 码龄16年 97粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值