博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode每天一题】Construct Binary Tree from Preorder and Inorder Traversal(使用前序和中序遍历构建二叉树)...
阅读量:6537 次
发布时间:2019-06-24

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

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 following binary tree:

3   / \  9  20    /  \   15   7 思路

  利用二叉树的前序遍历顺序和中序遍历顺序来构建二叉树,这道题我们可以利用前序遍历和中序遍历的特点来解决,前序遍历时第一个节点为根节点,然后我们使用该节点找出中序遍历中存在的位置下标,以中序遍历的特点我们可以知道,根节点的左子树一共存在几个节点,右子树一共存在几个节点。然后将前序遍历和中序遍历分成两部分,左子树节点和右子树节点。继续使用之前的方法来进行查找(前序遍历的第一个节点,找到中序遍历中存在的位置)。   另外,还有一道根据中序遍历和后序遍历结果来构建二叉树,这个思路和这道题的思路一模一样,只需要注意左子树和右子树的取值规则不一样而已。 图示步骤

 
解决代码

 
1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 #     def __init__(self, x): 4 #         self.val = x 5 #         self.left = None 6 #         self.right = None 7  8 class Solution(object): 9     def buildTree(self, preorder, inorder):10         """11         :type preorder: List[int]12         :type inorder: List[int]13         :rtype: TreeNode14         """    15         if not preorder and not inorder:  # 为空时直接返回None16             return None17         if len(preorder) == 1 and len(inorder) == 1:   # 只有一个元素时,返回该元素的节点值18             return TreeNode(preorder[0])19         first = preorder[0]                # 前序遍历中第一个元素20         index = inorder.index(first)        # 找出中序遍历中first元素的下标21         root = TreeNode(first)              # 构建根节点22         root.left = self.buildTree(preorder[1:index+1], inorder[:index])  # 求出左节点23         root.right = self.buildTree(preorder[1+index:], inorder[index+1:])  # 求右节点24         return root25
 

转载于:https://www.cnblogs.com/GoodRnne/p/10858672.html

你可能感兴趣的文章
POJ3321 Apple Tree (树状数组)
查看>>
一个程序员的自白(延迟满足)
查看>>
protocol buffers的编码原理
查看>>
行为型设计模式之命令模式(Command)
查看>>
减少死锁的几个常用方法
查看>>
HDFS 核心原理
查看>>
正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
查看>>
利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
查看>>
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
how to use perf
查看>>
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>
Ubuntu 12.04 root用户登录设置
查看>>
windows核心编程-互斥器(Mutexes)
查看>>
java5 CyclicBarrier同步工具
查看>>
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
查看>>
java 为啥变量名前要加个m?
查看>>
对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
查看>>
探索Android中的Parcel机制(上)
查看>>
c++ 类型定义
查看>>