刷题笔记day17

编程入门 行业动态 更新时间:2024-10-25 00:30:19

刷题<a href=https://www.elefans.com/category/jswz/34/1770047.html style=笔记day17"/>

刷题笔记day17

110.平衡二叉树

重点在如果左右不平衡的情况下,就一直返回-1,其他的情况就正常的计算左右节点高度的最大值 + 1,就是树的高度了。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func isBalanced(root *TreeNode) bool {// 使用递归的方法,if dg(root) != -1 {return true} else {return false}
}func dg(root *TreeNode) int {if root == nil {return 0}leftH := dg(root.Left)if leftH == -1 {return -1}rightH := dg(root.Right)if rightH == -1 {return -1}if absSub(leftH, rightH) > 1 {return -1}return max(leftH, rightH) + 1
}func absSub(a, b int) int {if a - b > 0 {return a - b} else {return b - a}
}func max(a, b int) int {if a > b {return a} else {return b}
}

257. 二叉树的所有路径

采用前序遍历,迭代法。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
import ("container/list""strconv"// "fmt"
)func binaryTreePaths(root *TreeNode) []string {// 思路:使用,// 迭代,前序遍历var result []stringif root == nil {return result}stack := list.New()stack.PushBack(root)path := list.New()path.PushBack(toString(root.Val))for stack.Len() > 0 {// 取出栈顶元素top := stack.Remove(stack.Back())node := top.(*TreeNode)// 取出 path 栈顶元素top2 := path.Remove(path.Back())p1 := top2.(string)// 叶子结点,打印路径if node.Right == nil && node.Left == nil {result = append(result, p1)}if node.Right != nil {stack.PushBack(node.Right)// path的栈顶都是已经走过的道路,仅需要加上当前的值既可。path.PushBack(p1 + "->" + toString(node.Right.Val))}if node.Left != nil {stack.PushBack(node.Left)path.PushBack(p1 + "->" + toString(node.Left.Val))}}return result
}func toString(a int) string {return strconv.Itoa(a)
}

404. 左叶子之和

使用递归的方法,只需要判断是不是从左节点下来,且是叶子结点既可。不是则返回0。最后做一个累加。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func sumOfLeftLeaves(root *TreeNode) int {// 思路,前序遍历,只需要记录是不是左叶子既可(通过参数)// 迭代的方法return traversal(root, false)
}func traversal(root *TreeNode, isLeft bool) int {if root == nil {return 0}if isLeft && root.Left == nil && root.Right == nil {return root.Val}leftValue := traversal(root.Left, true)rightValue := traversal(root.Right, false)return leftValue + rightValue
}

更多推荐

刷题笔记day17

本文发布于:2023-11-15 03:02:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1592616.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!