第六章 二叉树part04

文章探讨了平衡二叉树的性质,通过递归实现判断树是否平衡的方法,并提供了二叉树所有路径和左叶子节点值之和的计算。涉及函数如getDept、isBalanced、readStack、dfs和sumOfLeftLeaves。
摘要由CSDN通过智能技术生成

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左手八嘎呀路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值