力扣刷题心得

二叉树篇

今天是2022年11月30日,本以为疫情在11月会结束,没想到又继续封控了一个月,10月已经封了半个月,那时候就打算11月的时候,坚持每天力扣,幸不辱命。

image-20221130091516654

这个月也是跟着代码随想录 (programmercarl.com)刷题,巧合的是今天是11月的最后一天,也是完成代码随想录二叉树篇最后一题的一天。

我记得从最开始的二叉树的几种遍历顺序,最开始上手的是二叉树的层序遍历,弄清楚一个模版(双队列层序遍历二叉树)就可以开始“秒题”(大部分的简单、中等题):

func levelOrder(root *TreeNode) [][]int {
	// ret := [][]int{}
	if root == nil {
		return ret
	}
	q := []*TreeNode{root}
	for i := 0; len(q) > 0; i++ {
		// ret = append(ret, []int{})
		p := []*TreeNode{}
		for j := 0; j < len(q); j++ {
			node := q[j]
			// 此处可添加值操作;
			if node.Left != nil {
				p = append(p, node.Left)
			}
			if node.Right != nil {
				p = append(p, node.Right)
			}
		}
		q = p
	}
	return ret
}

然后就可以刷下面这些题了,

image-20221130093834363

之后,前序、中序、后续遍历也有一些题,但这时候主要考虑的递归方向的问题,恰当选择递归顺序。

中序应用最多的还是,二叉搜索树,因为中序遍历是有序的,这也是此章节最后一个难点。

不过此时,我仍对一些问题感觉模糊(靠着感觉能写对一些题,但对为什么的掌握还不到位):

  • 递归回溯,回溯表具体的表现位置;
  • 递归函数参数如何设置,递归函数返回值如何设置;

最最重要的事情是:坚持!

posted @ 2022-11-30 09:48  KpHang  阅读(72)  评论(0编辑  收藏  举报