怎样实现重建python二叉树
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天就跟大家聊聊有关怎样实现重建python二叉树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。题目:输入某二叉树的前序遍历和中序遍历的结果,
千家信息网最后更新 2025年01月23日怎样实现重建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安全错误
数据库的锁怎样保障安全
如何提高网络安全监管效能
阿里云服务器安全策略设置
网络安全的实训收获
海南盈泰网络技术有限公司怎么样
计算机集成控制与网络技术
哪种数据库压缩比高
网络安全威胁及预防方法
epon网络技术
软件开发承诺书样本
德州智慧养老软件开发软件
软件开发客户需求文档怎么写
软件开发的前端岗位
办公网络安全服务
西门子境外数据库
不同数据库之间相同点
linux重启DNS服务器
数据库如何修改某个字段
软件开发质量管理的基本内容
哪种数据库易用好
查看oracle数据库反应慢
共享网络安全向导
星能服务器进不了bios
湖北数据库代码生成器使用
金卢软件开发中心
ipad无法接通激活服务器
英雄联盟服务器延迟
机场安全风险数据库
办公网络安全服务
excel公式 数据库
成方金科 人民银行软件开发中心