当前位置:网站首页>【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
}
边栏推荐
- Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)
- 如何做一个炫酷的墨水屏电子钟?
- RichView TRVStyle MainRVStyle
- Kotlin - 协程 Coroutine
- One plus six brushes into Kali nethunter
- "C zero foundation introduction hundred knowledge and hundred cases" (72) multi wave entrustment -- Mom shouted for dinner
- Do you know the eight signs of a team becoming agile?
- Yyds dry inventory jetpack hit dependency injection framework Getting Started Guide
- 187. Repeated DNA sequence - with unordered_ Map basic content
- 【附源码】基于知识图谱的智能推荐系统-Sylvie小兔
猜你喜欢
Yyds dry inventory swagger positioning problem ⽅ formula
如何做一个炫酷的墨水屏电子钟?
力扣剑指offer——二叉树篇
CAM Pytorch
Chinese natural language processing, medical, legal and other public data sets, sorting and sharing
Introduce reflow & repaint, and how to optimize it?
Application and Optimization Practice of redis in vivo push platform
Prometheus monitors the correct posture of redis cluster
Win:使用 PowerShell 检查无线信号的强弱
[download white paper] does your customer relationship management (CRM) really "manage" customers?
随机推荐
Win:将一般用户添加到 Local Admins 组中
力扣剑指offer——二叉树篇
Bert fine tuning skills experiment
WCF: expose unset read-only DataMember property- WCF: Exposing readonly DataMember properties without set?
How to make a cool ink screen electronic clock?
Limited query of common SQL operations
[技术发展-26]:新型信息与通信网络的数据安全
Prometheus monitors the correct posture of redis cluster
openresty ngx_ Lua variable operation
Visual explanation of Newton iteration method
使用druid連接MySQL數據庫報類型錯誤
Five ways to query MySQL field comments!
Go RPC call
Yolov5 model training and detection
How to find hot projects in 2022? Dena community project progress follow-up, there is always a dish for you (1)
. Net starts again happy 20th birthday
A label making navigation bar
[机缘参悟-38]:鬼谷子-第五飞箝篇 - 警示之一:有一种杀称为“捧杀”
pytorch fine-tuning (funtune) : 镂空设计or 偷梁换柱
[Yu Yue education] National Open University spring 2019 0505-22t basic nursing reference questions