树的递归问题
在数据结构中,我们对树的学习主要讨论其两种遍历:
- 深度优先遍历法-前中后序遍历
- 广度优先遍历法
而前中后序遍历可以很简单的用递归写成如下形式:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
// 前序遍历
func preOrder(root *TreeNode) {
if root == nil
return
// 真实的处理逻辑
process(root)
preOrder(root.left)
preOrder(root.right)
}
// 中序遍历
func preOrder(root *TreeNode) {
if root == nil
return
preOrder(root.left)
// 真实的处理逻辑
process(root)
preOrder(root.right)
}
// 后序遍历
func preOrder(root *TreeNode) {
if root == nil
return
preOrder(root.left)
preOrder(root.right)
// 真实的处理逻辑
process(root)
}
通常情况下我们只需要对process(root *TreeNode)函数进行修改就可以了。对于树的遍历类问题,我们需要思考两个问题:
- 采用哪种遍历方式?
- 处理逻辑怎么写?
例如下列题目: