递归函数有返回值通常认为是动态规划;而回溯算法通常是递归函数没有返回值,通过传入指针的方式来处理。
104.二叉树的最大深度 #
543.二叉树的直径 #
144.二叉树的前序遍历 #
// 动态规划,问题分解:一棵树的前序遍历=根节点+左子树+右子树
// 定义:传递一棵树,返回该树的前序遍历
func preorderTraversal(root *TreeNode) []int {
if root == nil {
return nil
}
var ret []int
ret = append(ret, root.Val)
left := preorderTraversal(root.Left)
right := preorderTraversal(root.Right)
return append(append(ret, left...), right...)
}
175.计算二叉树的深度(剑指Offer) #
// 动态规划,问题分解,输入一棵树,返回这棵树的深度
func calculateDepth(root *TreeNode) int {
if root == nil {
return 0
}
left := calculateDepth(root.Left)
right := calculateDepth(root.Right)
if left >= right {
return left + 1
}else {
return right + 1
}
}
226.翻转二叉树 #
114.二叉树展开为链表 #