leetcode相关题目基础篇\
前言
二叉树中序遍历的顺序为:
先递归地遍历左子树;
随后遍历根节点;
最后递归地遍历右子树。
递归代码
func inorderTraversal(root *TreeNode) (res []int) {
var inorder func(node *TreeNode)
inorder = func(node *TreeNode) {
if node == nil {
return
}
inorder(node.Left)
res = append(res, node.Val)
inorder(node.Right)
}
inorder(root)
return
}
迭代代码
func inorderTraversal(root *TreeNode) (res []int) {
// 以栈的方式
stack := []*TreeNode{}
for root != nil || len(stack) > 0 {
for root != nil {
//入栈添加根节点 ,所有的根节点都会入栈
stack = append(stack, root)
root = root.Left
}
//出栈即该节点下子树已遍历
root = stack[len(stack)-1]
stack = stack[:len(stack)-1]
//出栈时操作
res = append(res, root.Val)
//将右子树入栈
root = root.Right
}
return
}