Leetcode 94. 二叉树的中序遍历
94. 二叉树的中序遍历 - 力扣(LeetCode) (leetcode-cn.com)

思路1 递归:
1.我印象中的“中序遍历是先访问左子树,再访问根节点,再访问右子树”。这样的描述有点模糊,
2.实际上前、中、后序遍历,都是先访问根节点,再访问它的左子树,再访问它的右子树。
3.它们之间的区别在于中序遍历,是将处理当前节点放在了访问完它的左子树之后。所以才会产生「左 根 右」的顺序。
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var result []int
func inorderTraversal(root *TreeNode) []int {
result = make([]int, 0)
dfs(root)
return result
}
func dfs(root *TreeNode) {
if root != nil {
dfs(root.Left)
result = append(result, root.Val)
dfs(root.Right)
}
}
思路2 迭代
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func inorderTraversal(root *TreeNode) []int {
result := make([]int, 0)
stack := make([]*TreeNode, 0)
for root != nil {
stack = append(stack, root)
root = root.Left
}
for len(stack)!= 0 {
node := stack[len(stack)-1]
stack = stack[:len(stack)-1]
result = append(result, node.Val)
node = node.Right
for node != nil {
stack = append(stack, node)
node = node.Left
}
}
return result
}

浙公网安备 33010602011771号