Subject to a
Leecode 94. Middle-order traversal of binary trees
Given the root node of a binary tree, return its middle-order traversal.
Input: root = [1,null,2,3]
Example 2:
Input: root = [] Output: []
Example 3:
Input: root = [1] Output: [1]
Example 4:
Input: root = [1,2] output: [2,1]
Example 5:
Input: root = [1, NULL,2]
Tip:
The number of nodes in the tree is in the range [0, 100] -100 <= node. val <= 100
First, we need to understand what middle order traversal of binary trees is: traversal of the tree in the same way that we visit the left subtree — the root node — the right subtree, and traversal of the left subtree or the right subtree in the same way until we have traversed the entire tree. Therefore, the whole traversal process naturally has the nature of recursion, we can directly use recursive function to simulate this process.
Reference code
Define a tree
Struct {* Val int Left *TreeNode // Left * Right *TreeNode // right node *} */Copy the code
GO language version of recursion
func inorderTraversal(root *TreeNode) (res []int) {
var inorder func(node *TreeNode)
inorder = func(node *TreeNode) {
if node == nil {
return // End the current recursion
}
inorder(node.Left) // Click on the bottom left
res = append(res, node.Val) // Add to array
inorder(node.Right) // See if there are any branches on the right. If there are, continue. If there are no branches, add the right node to the array
}
inorder(root)
return
}
Copy the code
Iteration stack for GO language version: First in last out
Define a stack, and the stack is a tree
1. First dislike the entire tree, then all the left subtrees
2. Traverse the left subtree, directly to the bottom left
3. I got the bottom left node because I came in and went out
4. Untag objects into arrays
5. Check if there are any left nodes rooted in the right node. If there are, go back to step 1 above.
func inorderTraversal(root *TreeNode) (res []int) {
stack := []*TreeNode{} // define a stack that stores a tree
forroot ! =nil || len(stack) > 0 {
forroot ! =nil {
stack = append(stack, root) // 1. First dislike the entire tree, then all the left subtrees
root = root.Left // 2. Traverse the left subtree, directly to the bottom of the left
}
root = stack[len(stack)- 1] // 3. Because of the first in, last out, get the bottom left node
stack = stack[:len(stack)- 1]
res = append(res, root.Val) // select * from array
If yes, go back to step 1. If no, go to step 3
root = root.Right //
}
return
}
Copy the code
Thank you for reading this, if this article is well written and if you feel there is something to it
Ask for a thumbs up 👍 ask for attention ❤️ ask for share 👥 for 8 abs I really very useful!!
If there are any mistakes in this blog, please comment, thank you very much! ❤ ️ ❤ ️ ❤ ️ ❤ ️