怎样实现重建python二叉树
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,今天就跟大家聊聊有关怎样实现重建python二叉树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。题目:输入某二叉树的前序遍历和中序遍历的结果,
千家信息网最后更新 2025年12月01日怎样实现重建python二叉树
今天就跟大家聊聊有关怎样实现重建python二叉树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
看到这个题目就明白需要花点时间,上数据结构课的时候,明白了怎么根据前序和中序可以唯一确定一颗二叉树,并且也知道怎么重建,但是要用代码实现起来,还是有点困难,毕竟自己很久没有写了。我知道要实现那种思路,肯定需要借用递归或者归并。但是不是理的很清,后面觉得借鉴别人怎么实现的,看完之后,决定自己动手,最开始用java编写,写完之后,出现空指针异常和数组非法访问错误,与别人代码对了很久,最后终于找到错误了,这个题困了我一天。对于空指针异常,自己建立对象或者声明数组的时候最好还是初始化,不要等到后面才想起,数组非法访问是由于自己声明的数组太大,没有很严谨,导致我前面一直找不到自己错在哪,感觉没有越界,把数组大小严格改到题目要求所需之后,就提交成功了,可能之前写C语言写习惯了,没有注意这方面,以后还是严谨一点。用js代码实现比Java要方便很多,比较顺利,虽然也出现错误,但是解决了java坑之后,来解决Js的坑就快很多了;
对于这种题目,主要还是想清楚怎么用递归实现,注意细节
java实现代码:
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
int len=in.length;
if(len==0)
return null;
TreeNode tree=new TreeNode(pre[0]);
int i,temp=-1,j=0;
for(i=0;i if(pre[0]==in[i]){
temp=i;
break;
}
}
int[] left=new int[temp];
int[] leftpre=new int[temp];
for(i=0;i left[i]=in[i];
leftpre[i]=pre[i+1];
}//左子树
int[] right=new int[len-temp-1];
int[] rightpre=new int[len-temp-1];
for(i=temp+1;i right[j]=in[i];
rightpre[j]=pre[i];
j++;
}//右子树
tree.left=reConstructBinaryTree(leftpre,left);
tree.right=reConstructBinaryTree(rightpre,right);
return tree;
} JavaScript实现代码:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
var len=vin.length;
if(len==0)
return null;
var tree=new TreeNode(pre[0]);
var i,temp=-1,j=0;
for(i=0;i if(pre[0]==vin[i]){
temp=i;
break;
}
}
var left=new Array(temp);
var leftpre=new Array(temp);
for(i=0;i left[i]=vin[i];
leftpre[i]=pre[i+1];
}//左子树
var right=new Array(len-temp-1);
var rightpre=new Array(len-temp-1);
for(i=temp+1;i right[j]=vin[i];
rightpre[j]=pre[i];
j++;
}//右子树
tree.left=reConstructBinaryTree(leftpre,left);
tree.right=reConstructBinaryTree(rightpre,right);
return tree;
// write code here
} 看完上述内容,你们对怎样实现重建python二叉树有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
代码
数组
还是
题目
子树
内容
错误
输入
严谨
序列
思路
指针
时候
结果
递归
清楚
困难
成功
对了
大小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北工业软件开发定制
中国网络安全状况白皮书
数据库怎样删除表中所有数据
怎么创我的世界服务器
软件开发制造业
济源app软件开发公司
郫县网络安全事故应急预案
网络安全工作部门
服务器都有哪些操作系统
苏州无线网络技术电话
软件销售和软件开发的区别
学校服务器挤进去
nginx检测服务器原理
免费开源数据库
湘潭智能软件开发中介
网络安全周主题党日通知
电子取证网络安全
客户化开发与软件开发
换新手机怎么将b站的数据库
简述软件开发几个阶段的内容
2020专技网络安全试卷
云霄县委网络安全委员会
我的世界pe服务器插件
关于网络安全知识海报
软件开发计算机系统
嘉兴工控软件开发
代理服务器映射内网
工业嵌入版与服务器版
西安交大网络安全有调剂名额吗
国家医保平台服务器开小差