1. 自顶向下
递归的自顶向下就是先进行操作,再调用自己进行递归
给定一个二叉树,检查它是否是镜像对称的。
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isSymmetric(root *TreeNode) bool{
return helper(root,root)
}
func helper(l,r *TreeNode) bool{
if l==nil && r==nil{
return true
}
if l==nil || r==nil{
return false
}
return l.Val==r.Val && helper(l.Left,r.Right) && helper(l.Right,r.Left)
}
这里就是先判断两个节点的值是否相等,再调用自己传两个节点进去判断是否相等进行递归。
这就是递归的自顶向下,从根节点开始判断,延续到子树。
2. 自底向上
递归的自底向上就是先调用自己进行递归,再进行操作
求二叉树的深度
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func maxDepth(root *TreeNode) int {
if root ==nil{
return 0
}
left := maxDepth(root.Left)
rigth := maxDepth(root.Right)
if left >= rigth{
return left+1
}else{
return rigth+1
}
}
这里就是先调用自己进行递归,得到自己的左右子树深度,再判断左右子树的深度。
这就是递归的自底向上,先摸进去到底部,再挖上来。