当前位置:网站首页>【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
}

边栏推荐
- [机缘参悟-38]:鬼谷子-第五飞箝篇 - 警示之一:有一种杀称为“捧杀”
- Learn tla+ (XII) -- functions through examples
- Introduce reflow & repaint, and how to optimize it?
- Win: add general users to the local admins group
- Some query constructors in laravel (2)
- Chinese natural language processing, medical, legal and other public data sets, sorting and sharing
- Redis distributed lock, lock code logic
- Security level
- 【附源码】基于知识图谱的智能推荐系统-Sylvie小兔
- Application and development trend of image recognition technology
猜你喜欢

Stored procedure and stored function in Oracle

Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)

Prometheus monitors the correct posture of redis cluster

Three properties that a good homomorphic encryption should satisfy

Variables in postman

Practical case of SQL optimization: speed up your database

The MySQL team development specifications used by various factories are too detailed. It is recommended to collect them!

Android advanced interview question record in 2022
![[technology development-26]: data security of new information and communication networks](/img/13/10c8bd340017c6516edef41cd3bf6f.png)
[technology development-26]: data security of new information and communication networks

Matrixone 0.2.0 is released, and the fastest SQL computing engine is coming
随机推荐
"C zero foundation introduction hundred knowledge and hundred cases" (72) multi wave entrustment -- Mom shouted for dinner
JVM's responsibility - load and run bytecode
Yolov5 model training and detection
Summary of regularization methods
Interpretation of mask RCNN paper
PowerShell:在代理服务器后面使用 PowerShell
A tab Sina navigation bar
Binary tree traversal - middle order traversal (golang)
Outlook:总是提示输入用户密码
When to catch an exception and when to throw an exception- When to catch the Exception vs When to throw the Exceptions?
Application and development trend of image recognition technology
Rabbit MQ message sending of vertx
Introduce reflow & repaint, and how to optimize it?
Matrixone 0.2.0 is released, and the fastest SQL computing engine is coming
RichView TRVUnits 图像显示单位
Kotlin - 协程 Coroutine
Word processing software
Win: use PowerShell to check the strength of wireless signal
What is the length of SHA512 hash string- What is the length of a hashed string with SHA512?
Asynchronous and promise