第六章 二叉树part04

由 Greyson 发布

110.平衡二叉树

  • 递归
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func getDept(root *TreeNode) int {
    if root == nil {
        return 0
    }
    return max(getDept(root.Left), getDept(root.Right))  + 1
}
func abs (a int) int {
    if a >= 0 {
        return a
    } 
    return -a
}
func isBalanced(root *TreeNode) bool {
    if root == nil {
        return true
    }
    return isBalanced(root.Left) && 
            isBalanced(root.Right) && 
            abs(getDept(root.Left) - getDept(root.Right)) <= 1
}

257. 二叉树的所有路径

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var res []string
var nodeList []*TreeNode

func readStack() {
    temp := ""
    for i := 0; i < len(nodeList); i++ {
        temp += strconv.Itoa(nodeList[i].Val)
        if i != len(nodeList)-1 {
            temp += "->"
        }
    }
    if temp != "" {
        res = append(res, temp)
    }
}

func dfs(root *TreeNode) {
    if root == nil {
        return
    }
    // visit
    nodeList = append(nodeList, root)
    if root.Left == nil && root.Right == nil {
        readStack()
    }
    dfs(root.Left)
    dfs(root.Right)
    // back
    nodeList = nodeList[:len(nodeList)-1] // 删除最后一个元素
}
func binaryTreePaths(root *TreeNode) []string {
    res = []string{}
    nodeList = []*TreeNode{}
    dfs(root)
    return res
}

404.左叶子之和

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 var sum = 0
 func dfs (root *TreeNode) {
    if root == nil {
        return
    }
    if root.Left != nil {
        if root.Left.Left == nil && root.Left.Right == nil {
            sum += root.Left.Val
        }
        dfs(root.Left)
    }
    dfs(root.Right)
 }
func sumOfLeftLeaves(root *TreeNode) int {
    sum = 0
    dfs(root)
    return sum
}

扫描二维码,在手机上阅读
收藏

0条评论

发表评论


验证码