101.对称二叉树-简单
题目描述:
给你一个二叉树的根节点 root , 检查它是否轴对称。
题解:
简单的递归,唯一要注意的就是不能直接递归,因为传入参数只有一个root,需要新建一个函数,传入两个参数,这样才能对比二叉树是否对称
代码(Go):
func isSymmetric(root *TreeNode) bool {
if root == nil{
return true
}
return isSame(root.Left,root.Right)
}
func isSame(rootl *TreeNode,rootr *TreeNode) bool{
if rootl == nil && rootr == nil{
return true
}else if rootl == nil || rootr == nil{
return false
}
if rootl.Val == rootr.Val{
return isSame(rootl.Right,rootr.Left) && isSame(rootl.Left, rootr.Right)
}
return false
}
244.二叉树的前序遍历-简单
题目描述:
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
题解:
递归很简单,迭代使用栈实现,官方题解有之前提到过的Morris算法,目前还是学的不太明白
代码(Go):
func preorderTraversal(root *TreeNode) (vals []int) {
stack := []*TreeNode{}
node := root
for node != nil || len(stack) > 0 {
for node != nil {
vals = append(vals, node.Val)
stack = append(stack, node)
node = node.Left
}
node = stack[len(stack)-1].Right
stack = stack[:len(stack)-1]
}
return
}
404.左叶子之和-简单
题目描述:
给定二叉树的根节点 root ,返回所有左叶子之和。
题解:
递归解决
代码(Go):
func sumOfLeftLeaves(root *TreeNode) int {
if root == nil{
return 0
}
if root.Left == nil && root.Right == nil{
return 0
}
sum := 0
if root.Left != nil{
sum += sumOfLeftLeaves(root.Left)
if root.Left.Left == nil && root.Left.Right == nil{
sum += root.Left.Val
}
}
if root.Right != nil{
sum += sumOfLeftLeaves(root.Right)
}
return sum
}
566.重塑矩阵-简单
题目描述:
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
题解:
遍历一遍矩阵就可以了,没什么简单方法
代码(Go):
func matrixReshape(mat [][]int, r int, c int) [][]int {
m := len(mat)
n := len(mat[0])
if m * n != r * c{
return mat
}
sce :=make([][]int,r)
for i := range sce{
sce[i] = make([]int,c)
}
for i := 0;i < m * n;i++{
sce[i/c][i%c] = mat[i/n][i%n]
}
return sce
}
总结
看了一遍Morris算法,其他没什么意思,感觉明天开始可以试试每天一道中等题了