当前位置:网站首页>【LeetCode】106. Construct binary tree from middle order and post order traversal sequence (wrong question 2)
【LeetCode】106. Construct binary tree from middle order and post order traversal sequence (wrong question 2)
2022-07-05 02:20:00 【Kaimar】


- Ideas
The result of middle order traversal is different from that of pre order traversal 、 Post order traversal for combination , Can uniquely identify a tree , Using traversal results to construct a tree is to do segmentation , Middle order and post order traversal combination , Determine the current node through the reverse order of post order traversal , Then divide the middle order to determine the left and right subtrees , Such as 3 Is divided into [9],[15, 20, 7] Respectively 3 Right and left subtrees .
Or recursion , So there is a recursive trilogy ( Write a version of the code and make mistakes , It was an error in cutting , It's better to recurse without knowing how to cut , Refer to the explanation of the question )
There are six steps in total :
First step : If the array size is zero , It indicates that the node is empty .
The second step : If it's not empty , Then take the last element of the subsequent array as the node element .
The third step : Find the position of the last element of the ordered array in the ordered array , As a cutting point
Step four : Cut the ordered array , Cut into middle order left array and middle order right array ( Don't reverse the order , It must be the first to cut the ordered array )
Step five : Cut sequential array , Cut into the left array and the right array
Step six : Recursively handle left and right intervals
The difficulty lies in how to cut , It is necessary to unify the opening and closing of the left and right , Then there is how to cut the sequence , How to find the cutting point of the subsequent array ?
There is no explicit cutting element in the subsequent array to cut left and right , Unlike a mid order array, there are clear cut points , Just separate the cutting points left and right .
At this point, there is a very heavy point , That is, the size of the middle order array must be the same as that of the later order array ( This is inevitable ).
- summary
This problem knows that thinking and writing code are two different things , There are still many difficulties in writing code , One is when to return , The second is how to split the middle order and post order arrays , The third is the segment details .
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */
func buildTree(inorder []int, postorder []int) *TreeNode {
// 1. Array is empty , Null node
nLen := len(inorder)
if nLen == 0 {
return nil
}
// 2. Not empty , Then the last node of post order traversal is taken as the root node
// A special case , Only one is leaf node , Go straight back to
root := &TreeNode{
Val : postorder[nLen - 1],
Left : nil,
Right : nil,
}
if nLen == 1 {
return root
}
// 3. Find the split point in the middle order traversal
var i int
for i = 0; i < nLen; i++ {
if inorder[i] == postorder[nLen - 1] {
break
}
}
// 4. Divide the middle order traversal array
// [0, i)
leftInorder := inorder[:i]
// [i + 1, len(inorder))
rightInorder := inorder[i + 1 :]
// 5. After splitting, traverse the array
// Lose the last
postorder = postorder[: len(postorder) - 1]
// Find the dividing point through the length
point := len(leftInorder)
// [0, point)
leftPostorder := postorder[: point]
// [point, len(postorder))
rightPostorder := postorder[point : ]
// 6. Recursion goes to the next level
root.Left = buildTree(leftInorder, leftPostorder)
root.Right = buildTree(rightInorder, rightPostorder)
return root
}

边栏推荐
- Introduce reflow & repaint, and how to optimize it?
- openresty ngx_lua执行阶段
- Summary of regularization methods
- Summary and practice of knowledge map construction technology
- Win:将一般用户添加到 Local Admins 组中
- Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)
- Erreur de type de datagramme MySQL en utilisant Druid
- Using druid to connect to MySQL database reports the wrong type
- February database ranking: how long can Oracle remain the first?
- pytorch fine-tuning (funtune) : 镂空设计or 偷梁换柱
猜你喜欢

Comment mettre en place une équipe technique pour détruire l'entreprise?

Video display and hiding of imitation tudou.com

Missile interception -- UPC winter vacation training match

Openresty ngx Lua Execution stage

如何做一个炫酷的墨水屏电子钟?

Win: use shadow mode to view the Desktop Session of a remote user

Tucson will lose more than $400million in the next year

The application and Optimization Practice of redis in vivo push platform is transferred to the end of metadata by

R language uses logistic regression and afrima, ARIMA time series models to predict world population

How to make a cool ink screen electronic clock?
随机推荐
Win: use PowerShell to check the strength of wireless signal
I use these six code comparison tools
Exploration of short text analysis in the field of medical and health (I)
runc hang 导致 Kubernetes 节点 NotReady
85.4% mIOU! NVIDIA: using multi-scale attention for semantic segmentation, the code is open source!
Codeforces Round #770 (Div. 2) ABC
ICSI 311 Parser
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
Blue bridge - maximum common divisor and minimum common multiple
Traditional chips and AI chips
Pgadmin 4 V6.5 release, PostgreSQL open source graphical management tool
Interesting practice of robot programming 15- autoavoidobstacles
Limited query of common SQL operations
如何搭建一支搞垮公司的技术团队?
Yyds dry inventory swagger positioning problem ⽅ formula
He was laid off.. 39 year old Ali P9, saved 150million
Outlook:总是提示输入用户密码
Summary of regularization methods
One click generation and conversion of markdown directory to word format
Introduce reflow & repaint, and how to optimize it?