重建二叉树

本文介绍了一种通过先序遍历和中序遍历构造二叉树的方法。该方法利用递归过程,根据先序遍历的第一个元素在中序遍历中的位置来划分左右子树,并进一步递归构造。代码实现采用C++。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门:重建二叉树


通过给定的先序遍历与中序遍历的顺序构造出二叉树的结构。

先序遍历优先访问根节点然后访问子节点。因此可以通过先序遍历中第一个节点在中序遍历中的位置把节点分为左子树的节点以及右子树的节点。然后再对分出的区间进行同样的递归操作即可


/******************************************************
 * File Name:   tree.cpp
 * Author:      kojimai
 * Create Time: Fri 10 Apr 2015 08:58:04 PM CST
******************************************************/

/*struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x): val(x),left(NULL),right(NULL){}
};*/

class Solution {
	public:
		struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
			TreeNode* root = NULL;
			if(pre.size() == 0 || pre.size() != in.size())
				return root;
			root = new TreeNode(pre[0]);
			int indexOfRoot = 0;
			while(in[indexOfRoot] != pre[0])
				indexOfRoot++;
			root->left = constructTree(pre,in,0,indexOfRoot-1,1,indexOfRoot);
			cout<<"left"<<endl;
			root->right = constructTree(pre,in,indexOfRoot+1,in.size()-1,indexOfRoot+1,in.size()-1);
			return root;
		}
		TreeNode* constructTree(vector<int> &pre,vector<int> &in,int inLeft,int inRight,int preLeft,int preRight) {
			cout<<"inLeft = "<<inLeft<<" inRight = "<<inRight<<" preL = "<<preLeft<<" preRight =" <<preRight<<endl;;
			if(inLeft > inRight || preLeft > preRight)
				return NULL;
			TreeNode* root = new TreeNode(pre[preLeft]);
			cout<<"val = "<<pre[preLeft]<<endl;
			if(inLeft == inRight)
				return root;
			//cout<<"preL = "<<preLeft<<" pre = "<<pre[preLeft]<<endl;
			int indexOfRoot = 0;
			while(in[indexOfRoot+inLeft] != pre[preLeft])
				indexOfRoot++;
			//cout<<indexOfRoot<<endl;
			root->left = constructTree(pre,in,inLeft,inLeft+indexOfRoot-1,preLeft+1,preLeft+indexOfRoot);
			root->right = constructTree(pre,in,inLeft+indexOfRoot+1,inRight,preLeft+indexOfRoot+1,preRight);
			return root;
		}
};


标题SpringBoot与Vue融合的垃圾分类回收网站研究AI更换标题第1章引言介绍垃圾分类的重要性,SpringBoot与Vue技术融合的优势,以及本研究的意义和价值。1.1研究背景与意义分析当前垃圾分类的紧迫性和SpringBoot与Vue在垃圾分类回收网站开发中的应用前景。1.2国内外研究现状概述国内外在垃圾分类回收系统方面的研究现状和技术应用情况。1.3论文方法与创新点说明本文采用的研究方法和系统开发的创新之处。第2章相关技术概述简述SpringBoot和Vue的技术特点及其在垃圾分类回收网站中的应用。2.1SpringBoot框架介绍介绍SpringBoot框架的主要特点和优势。2.2Vue.js框架介绍阐述Vue.js框架的基本原理和应用范围。2.3SpringBoot与Vue的融合应用探讨SpringBoot后端与Vue前端如何有效融合,提升用户体验。第3章垃圾分类回收网站系统设计详细描述基于SpringBoot和Vue的垃圾分类回收网站的设计方案。3.1系统架构设计给出系统的整体架构设计,包括前后端分离的设计思路。3.2数据库设计介绍系统所使用的数据库结构设计和数据表关系。3.3界面设计阐述基于Vue的前端界面设计,包括用户交互流程和界面展示。第4章系统实现与测试详细介绍垃圾分类回收网站的实现过程和测试情况。4.1系统后端实现说明SpringBoot后端的具体实现,包括接口设计、业务逻辑处理等。4.2系统前端实现Vue前端的具体实现,包括组件开发、状态管理等。4.3系统测试与性能分析对系统进行功能测试和性能测试,分析系统的稳定性和响应速度。第5章结论与展望总结本文的研究成果,展望未来的研究方向和应用前景。5.1研究结论概括性地阐述本文的主要研究结论和系统的实际应用价值。5.2未来研究方向提出未来可能的研究方向,如系统优化、智能分类算法研究等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值