博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
105. Construct Binary Tree from Preorder and Inorder Traversal(python+cpp)
阅读量:3702 次
发布时间:2019-05-21

本文共 2207 字,大约阅读时间需要 7 分钟。

题目:

Given preorder and inorder traversal of a tree, construct the binary tree.

Note: You may assume that duplicates do not exist in the tree.
For example, given

preorder = [3,9,20,15,7] inorder = [9,3,15,20,7] Return the followingbinary tree:     3        / \      9  20     /  \        15   7

解释:

根据前序遍历和中序遍历确定二叉树,注意,这样的二叉树是唯一的。
python代码:

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def buildTree(self, preorder, inorder):        """        :type preorder: List[int]        :type inorder: List[int]        :rtype: TreeNode        """        #遍历中序,前序遍历的第一个结点一定是根节点,根节点后面紧跟的若干个结点一定是它的左子树        if not preorder:            return None        root_val=preorder[0]        index=inorder.index(root_val)        root=TreeNode(root_val)        pre_left,in_left=preorder[1:index+1],inorder[:index]        pre_right,in_right=preorder[index+1:],inorder[index+1:]        if pre_left:            root.left=self.buildTree(pre_left,in_left)        if pre_right:            root.right=self.buildTree(pre_right,in_right)        return root

c++代码:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {
public: TreeNode* buildTree(vector
& preorder, vector
& inorder) {
if (!preorder.size()) return NULL; int root_val=preorder[0]; TreeNode* root=new TreeNode(root_val); int idx=find(inorder.begin(),inorder.end(),root_val)-inorder.begin(); vector
pre_left(preorder.begin()+1,preorder.begin()+idx+1); vector
in_left(inorder.begin(),inorder.begin()+idx); vector
pre_right(preorder.begin()+idx+1,preorder.end()); vector
in_right(inorder.begin()+idx+1,inorder.end()); if(pre_left.size()) root->left=buildTree(pre_left,in_left); if(pre_right.size()) root->right=buildTree(pre_right,in_right); return root; }};

总结:

这几道重构二叉树的题目的阶梯套路都是一样的,需要注意的就是切片时候的取值。

转载地址:http://hglcn.baihongyu.com/

你可能感兴趣的文章
zabbix_agent5.0实现自动注册
查看>>
zabbix监控tomcat之Zabbix-java-gateway启动报错
查看>>
oracle-plsql执行脚本显示中文出现乱码
查看>>
keepalived实现Mysql高可用
查看>>
Spring Boot整合Thymeleaf模板
查看>>
Spring Boot整合FreeMarker模板
查看>>
IDEA如何自动生成 serialVersionUID 的设置
查看>>
git关联远程仓库--码云
查看>>
SpringBoot的单/多文件上传
查看>>
SQL语句大全
查看>>
SpringBoot安全管理 ——模块3:OAuth 2的简单应用
查看>>
SpringBoot消息服务 —— SpringBoot整合ActiveMQ
查看>>
Java 虚拟机 (JVM)系列一
查看>>
mybatis 中插入数据,如何获取到新增数据的主键 id
查看>>
SpringBoot + Vue 如何实现导出Excel操作,这篇文章帮你解决!
查看>>
IDEA访问不了官网解决办法
查看>>
Docker 基础篇之快速上手【一】
查看>>
Docker 基础篇之快速上手【二】
查看>>
【大厂面试】面试官都爱问的 Redis 事务
查看>>
IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
查看>>