问题描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。
提供两种解法
1 递归实现
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
}
2 循环迭代
func inorderTraversal(root * TreeNode)(res []int){
//创建一个栈
stack := []*TreeNode{}
for root!= nil || len(stack) > 0{
for root != nil{
// 把父亲节点和左子树依次入栈
stack = append(stack, root)
root = root.Left
}
// 取出栈顶元素,并调整stack
root = stack[len(stack)-1]
stack = stack[:len(stack)-1]
res = append(res, root.Val)
//到此左子树结束,开始遍历右子树
root = root.Right
}
return
}
这篇博客介绍了如何使用递归和循环迭代两种方法实现二叉树的中序遍历。递归解法中定义了一个匿名函数,从根节点开始递归地遍历左子树、访问节点、然后遍历右子树。循环迭代解法则利用栈来辅助遍历,先将左子树压栈,然后访问节点并转向右子树,直至遍历完整个二叉树。
559

被折叠的 条评论
为什么被折叠?



