当前位置:网站首页>leetcode:105. Constructing binary trees from preorder and inorder traversal sequences
leetcode:105. Constructing binary trees from preorder and inorder traversal sequences
2022-07-07 07:39:00 【uncle_ ll】
105. Construction of binary trees from traversal sequences of preorder and middle order
source : Power button (LeetCode)
link : https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
Given two arrays of integers preorder and inorder , among preorder Is the prior traversal of a binary tree , inorder Is the middle order traversal of the same tree , Please construct a binary tree and return its root node .
Example 1:
Input : preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output : [3,9,20,null,null,15,7]

Example 2:
Input : preorder = [-1], inorder = [-1]
Output : [-1]
Tips :
- 1 <= preorder.length <= 3000
- inorder.length == preorder.length
- -3000 <= preorder[i], inorder[i] <= 3000
- preorder and inorder all No repetition Elements
- inorder All appear in preorder
- preorder Guarantee It is the preorder traversal sequence of binary tree
- inorder Guarantee It is the middle order traversal sequence of binary tree
solution
- recursive : Pre order traversal and middle order traversal are given , The first element of the preorder traversal is the root node location , Then, based on the value of the root node, go to the middle order traversal to find the location of the root node , Based on this, the middle order traversal is divided into left subtree traversal and right subtree traversal results ; Find the preorder traversal of left and right subtrees in the preorder traversal based on the length of left subtree ; Next, you can recursively traverse the pre order and middle order of the left subtree , Preorder traversal and inorder traversal of right subtree ; obtain root.left And root.right, Eventually return root that will do ; The key is to find root The subscript ; If using index Way to find words , Each search requires a traversal , The complexity is O ( n ) O(n) O(n), The total complexity is O ( n 2 ) O(n^2) O(n2), Here, a hash table is used to store the subscript of the middle order traversal , Find time changed to O ( 1 ) O(1) O(1), Space for time
Code implementation
recursive
python Realization
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
n = len(preorder)
if n == 0:
return None
indexs = {
element: i for i, element in enumerate(inorder)}
def helper(preorder_left, preorder_right, inorder_left, inorder_right):
if preorder_left > preorder_right:
return None
preorder_index = preorder_left
inorder_root = indexs[preorder[preorder_index]]
root = TreeNode(preorder[preorder_index])
left_preorder_size = inorder_root - inorder_left
root.left = helper(1+preorder_left, preorder_left+left_preorder_size, inorder_left, inorder_root-1)
root.right = helper(1+preorder_left+left_preorder_size, preorder_right, inorder_root+1, inorder_right)
return root
return helper(0, n-1, 0, n-1)
c++ Realization
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
private:
unordered_map<int, int> index;
public:
TreeNode* helper(const vector<int>& preorder, const vector<int>& inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
if (preorder_left > preorder_right)
return nullptr;
int preorder_root = preorder_left;
int inorder_root = index[preorder[preorder_root]];
TreeNode* root = new TreeNode(preorder[preorder_root]);
int size_left_subtree = inorder_root - inorder_left;
root->left = helper(preorder, inorder, preorder_left+1, preorder_left+size_left_subtree, inorder_left, inorder_root-1);
root->right = helper(preorder, inorder, preorder_left+size_left_subtree+1, preorder_right, inorder_root+1, inorder_right);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n = preorder.size();
if (n == 0)
return nullptr;
for (int i=0; i<n; i++) {
index[inorder[i]] = i;
}
return helper(preorder, inorder, 0, n-1, 0, n-1);
}
};
Complexity analysis
- Time complexity : O ( N ) O(N) O(N)
- Spatial complexity : O ( N ) O(N) O(N)
边栏推荐
- 微博发布案例
- Causes and solutions of oom (memory overflow)
- JS small exercise ---- time sharing reminder and greeting, form password display hidden effect, text box focus event, closing advertisement
- Leetcode sword finger offer brush questions - day 20
- Example of Pushlet using handle of Pushlet
- 机器人技术创新与实践旧版本大纲
- About some details of final, I have something to say - learn about final CSDN creation clock out from the memory model
- PostgreSQL source code (60) transaction system summary
- gslx680触摸屏驱动源码码分析(gslX680.c)
- Advanced level of C language (high level) pointer
猜你喜欢

三、高质量编程与性能调优实战 青训营笔记

4、 High performance go language release optimization and landing practice youth training camp notes

ROS2规划系统plansys2简单的例子

Flutter riverpod is comprehensively and deeply analyzed. Why is it officially recommended?

一、Go知识查缺补漏+实战课程笔记 | 青训营笔记

1、 Go knowledge check and remedy + practical course notes youth training camp notes

URP - shaders and materials - simple lit

1090: integer power (multi instance test)

Leetcode-226. Invert Binary Tree

@component(““)
随机推荐
The metauniverse of the platofarm farm continues to expand, with Dao governance as the core
@component(““)
Docker compose start redis cluster
测试周期被压缩?教你9个方法去应对
IO流 file
按键精灵采集学习-矿药采集及跑图
leetcode:105. 从前序与中序遍历序列构造二叉树
Interviewer: what development models do you know?
PostgreSQL source code (59) analysis of transaction ID allocation and overflow judgment methods
软件验收测试
Tongda injection 0day
基于Flask搭建个人网站
解决:Could NOT find KF5 (missing: CoreAddons DBusAddons DocTools XmlGui)
2、 Concurrent and test notes youth training camp notes
Calculus key and difficult points record part integral + trigonometric function integral
Build personal website based on flask
The currently released SKU (sales specification) information contains words that are suspected to have nothing to do with baby
记一个并发规则验证实现
Advanced level of C language (high level) pointer
4、 High performance go language release optimization and landing practice youth training camp notes